Git操作指南
虽然Github Desktop用得很爽,但是偶尔也会有一些特殊的需求(比如回滚或是在Linux环境下操作),故还是在此记录一下。
- 初始化:
git init project - 添加远程仓库:
git remote add origin https://github.com/xxx/xxx.git - 设置默认远程仓库:
git push -u origin master:master - 查看状态:
git status - 查看日志:
git log - 查看文件差异:
git diff file - 查看提交/回复记录:
git reflog - 回滚:
git reset --hard HEAD^(或者跟哈希码,从reflog里得到)git reset --hard commit_id // 不保留未提交的修改 git reset --soft commit_id // 默认方式,保留未提交的修改 - 回滚完强制覆写远端仓库记录:
git push origin local_branch --force - 添加要提交的文件:
git add xxx.cpp - 提交到暂存区:
git commit -m "update log"/-am实现添加并提交 - 保存工作区:
git stash -u - 删除暂存区
git clean -f 删除当前目录下untrack文件和文件夹, 不包括.gitignore中指定的文件和文件夹 git clean -df 删除当期目录下的所有untrack的文件和文件夹 git clean -xdf - 推到远端仓库:
git push - 只提交部分文件,同时修改提交时间
git add something
git stash -u -k # the most important step
git commit --date="Thu Jun 27 15:00:00 2019 +0800" -m "xxx"
git stash pop # pop out modification
- 创建分支:
git checkout -b dev - 查看分支:
git branch - 切换分支:
git checkout master - 合并分支:
git merge dev - 拉取特定分支:
git pull origin <远程分支名>:<本地分支名> - 拉取PR分支:
git fetch origin pull/$ID/head:$BRANCHNAME,$BRANCHNAME是自己想要创建的分支名 - 合并多个commit:
git rebase -i id
设置git账户信息(如果已经设置了,需要用--replace-all覆盖)
git config --global user.name "username"git config --global user.email "email"git config --list
当git文件夹在MacOS/Linux/Windows下迁移时,可能会出现git status将没有发生改变的文件也纳入变化的文件中,这可能是因为行尾换行或是文件权限引起的,可通过下面设置进行忽视。
# CRLF/LF
git config --global core.autocrlf true # Windows
git config --global core.autocrlf input # Linux
# File permission
git config core.fileMode false # ignore permission
子模块
- 添加子模块:
git submodule add <url> - 初始化子模块:
git submodule init - 拉取子模块到本地仓库:
git submodule update - 更新子模块内容:进入子模块文件夹后,
git pull
添加SSH连接
参见Generating a new SSH key and adding it to the ssh-agent。
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# This creates a new ssh key, using the provided email as a label.
> Generating public/private rsa key pair.
> Enter a file in which to save the key (/home/you/.ssh/id_rsa): [Press enter]
> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]
# Adding your SSH key to the ssh-agent
$ eval "$(ssh-agent -s)"
> Agent pid 59566
$ ssh-add ~/.ssh/id_rsa
然后将.ssh/id_rsa.pub添加到Github账户中,参见此文。
可通过下面指令测试SSH是否能正常连接Github,见此文。
$ ssh -T git@github.com
用SSH方式git clone可能比用HTTP快。关于在Linux下提速git clone,可参见此文。
但注意用SSH很可能没法push上去,如果Github Desktop的SSH连接没有设置好的话,因此这时候可以重新将SSH换回HTTP,参见此文。