乐者为王

Do one thing, and do it well.

Git笔记之branch,merge和rebase

1
2
3
4
5
6
7
8
git branch  # 列出所有分支以及当前在哪个分支上
git branch <branch>  # 建立分支
git branch -m <oldbranch> <newbranch>  # 修改分支的名字
git checkout <branch>  # 切换分支
git checkout -b <branch> <commit>  # 新建分支并切换过去
git branch -d <branch>  # 刪除分支
git merge <branch>  # 合并分支到当前分支上
git rebase <branch>  # 将提交迁移到上游分支

在merge/rebase的过程中,也许会出现冲突。在这种情况,Git会停止merge/rebase并让你去解决冲突,冲突内容以如下形式存在:

1
2
3
4
5
<<<<<<< HEAD
Here is the original change.
=======
Here is the modified chagne.
>>>>>>>

<<<<<<<下面的是当前版本的内容;=======和>>>>>>>之间的则是分支里与之对应的有冲突的内容。修复冲突要做的就是把<<<<<<< HEAD和>>>>>>>之间的内容改成我们想要的。在解决完冲突后,用git add命令去更新这些内容,如果是rebase,那么你无需执行git commit,只要执行git rebase --continue命令即可,这样Git会继续apply余下的补丁。

rebase的做法是先将HEAD指向目标分支的最新commit,这时HEAD的内容变为目标分支最新commit的SHA1值,然后将当前分支的commit,一个个重新apply到目标分支上,完成后再将HEAD指向新的commit。例如,当前分支是master,然后执行git rebase dev,就会把两个分支的共同祖先的commit之后的所有master的commit记录,重新在dev分支上再commit一遍。

git-rebase

fast-forward在Git中是一种merge术语,当dev分支是从master分支的最新commit分出来的时候,那么如果master要把dev分支merge进来,由于dev的parent commit是master的最新commit,所以这两个分支的合并不会有任何冲突,实际上的动作只是把master的HEAD指向dev的最新commit而已。线图上来看两个分支根本是同一条线。

git-merge-ff

Comments