基础命令
远程仓库命令
获取远端修改
git fetch <remote> <place>
git fetch origin <source>:<destination>
git fetch将本地仓库的origin/master更新至远程仓库,但是并不会改变你本地仓库的状态。它不会更新你的 master 分支,也不会修改你磁盘上的文件。
拉取远端修改并合并
git pull
git pull是 git fetch 和 git merge 的缩写
提交修改
git push <remote> <place>
git push origin <source>:<destination>
创建提交记录
git commit
创建新分支
git branch <your-branch-name> <commit> # commit省略为HEAD
git checkout -b <your-branch-name> # 切换并新建分支
# 将 master 分支强制指向 某个commit/branch 或者 相对位置
git branch -f master HEAD~3
git branch -f master origin/master
合并分支
在master下合并dev分支,创建一个新的commit,保留两个分支的所有修改,保留master分支树的形态。
git merge
合并为线性分支
将dev分支下的所有commit内容复制保留,并合并到master分支,使得整个master分支呈线性记录,这也是使用rebase(变基)的主要原因。
git rebase <upstream-branch> <to-branch> # 被合并分支默认为当前分支
指定HEAD到提交记录
git checkout <commit>
# 指定head到master上一个commit
git checkout master^
# 指定head到上n个commit
git checkout ~n
撤销变更
git reset HEAD^ # 撤销到上一个commit,本地分支使用
git revert HEAD # 远程分支使用,撤销当前commit
移动commit
可以提取某次有用的修改;或者需要修改历史上的某次修改,可以将某个commit提取到head进行修改,再修改顺序将其放回原位置。
# 将某个commit复制到当前HEAD
git cherry-pick <提交号>...
# 交互式 rebase
git rebase -i HEAD~4
标签
git tag
查看状态与记录
git status
git log
跟踪origin/master
设置foo分支跟踪origin/master
git checkout -b foo origin/master
# 或者
git branch -u o/master foo
使用场景
若远端master代码改动时,更新dev分支
# 更新master分支到远程
git checkout master
git pull
# 将master分支的修改合并到dev
git checkout dev
git merge master
# push最新的dev分支
git push -u origin dev
远端master代码改动时,更新master分支
使用merge合并
# 将远端的master拉取到本地
git pull
# 将dev分支到master
git merge dev
# 若有冲突
git add .
git rebase --continue
使用rebase保持master的线性,git pull --rebase相当于fetch和rebase的简写
# 将远端的master拉取到本地
git pull
# 将dev分支rebase到master
git checkout dev
git rebase master
# 若有冲突
git add .
git rebase --continue
# 更新master
git checkout master
git rebase dev
上线最新的dev代码到master
# 获取最新的dev分支
git checkout dev
git pull
# 将dev分支合并至master分支
git checkout master
git merge dev
# 更新远端master分支
git push -u origin master