下面我们通过演示一个实例来讲解怎样进行合并。假如我们存在两个分支master和dev。我们在dev下面创建一个dev.txt文件(提交),然后进入master分支,将dev分支合并到master。具体操作如下:
# 查看当前系统分支 Administrator@lenovoPC MINGW32 ~/Desktop/git/git-demo (master) $ git branch dev * master # 切换到dev分支 Administrator@lenovoPC MINGW32 ~/Desktop/git/git-demo (master) $ git checkout dev Switched to branch 'dev' # 在dev分支下面常见dev.txt文件 Administrator@lenovoPC MINGW32 ~/Desktop/git/git-demo (dev) $ echo "world" > dev.txt # 提交dev.txt文件 Administrator@lenovoPC MINGW32 ~/Desktop/git/git-demo (dev) $ git add . warning: LF will be replaced by CRLF in dev.txt. The file will have its original line endings in your working directory. Administrator@lenovoPC MINGW32 ~/Desktop/git/git-demo (dev) $ git commit -m "test merge" [dev b742a56] test merge 1 files changed, 1 insertions(+) create mode 100644 dev.txt # 切换回master分支 Administrator@lenovoPC MINGW32 ~/Desktop/git/git-demo (dev) $ git checkout master Switched to branch 'master' # 将dev分支合并到master分支 Administrator@lenovoPC MINGW32 ~/Desktop/git/git-demo (master) $ git merge dev Updating 196190b..b742a56 Fast-forward dev.txt | 1 + 1 files changed, 1 insertions(+) create mode 100644 dev.txt
上面实例是在master分支和dev分支不存在文件同名(即冲突的情况下),如果master和dev下面都存在一个dev.txt文件会怎么样呢?我们基于上面的实例,分别在master和dev分支修改dev.txt文件的内容且提交到当前分支,然后再次将dev分支合并到master分支。具体操作如下:
# 在master分支下面修改dev.txt文件且提交 Administrator@lenovoPC MINGW32 ~/Desktop/git/git-demo (master) $ echo "master update" >> dev.txt Administrator@lenovoPC MINGW32 ~/Desktop/git/git-demo (master) $ git commit -a -m "update dev.txt" warning: LF will be replaced by CRLF in dev.txt. The file will have its original line endings in your working directory. [master bad32ab] update dev.txt 1 file changed, 1 insertion(+) # 切换到dev分支,并且修改dev.txt文件,然后提交修改 Administrator@lenovoPC MINGW32 ~/Desktop/git/git-demo (master) $ git checkout dev Switched to branch 'dev' Administrator@lenovoPC MINGW32 ~/Desktop/git/git-demo (dev) $ echo "dev update" >> dev.txt Administrator@lenovoPC MINGW32 ~/Desktop/git/git-demo (dev) $ git commit -a -m "update dev.txt" warning: LF will be replaced by CRLF in dev.txt. The file will have its original line endings in your working directory. [dev e23c966] update dev.txt 1 file changed, 1 insertion(+) # 回到master分支,将dev分支合并到master分支,此时将会抛出错误 # 因为我们分别在master和dev分支下面修改了dev.txt文件,文件冲突了 Administrator@lenovoPC MINGW32 ~/Desktop/git/git-demo (dev) $ git checkout master Switched to branch 'master' Administrator@lenovoPC MINGW32 ~/Desktop/git/git-demo (master) $ git merge dev Auto-merging dev.txt CONFLICT (content): Merge conflict in dev.txt Automatic merge failed; fix conflicts and then commit the result.
上面合并出现了冲突错误,此时dev.txt文件的内容该是什么样子的呢?我们使用vim编辑器进入dev.txt文件查看,如下:
Administrator@lenovoPC MINGW32 ~/Desktop/git/git-demo (master|MERGING) $ cat dev.txt world 2017-03-23 22:45:52 <<<<<<< HEAD # 当前分支(HEAD中保存的是当前分支信息)master master update ======= # 两个分子修改东西的分隔符(上是当前分支,下面是dev) dev update >>>>>>> dev # dev分支
手动合并,使用VIM等编辑器将你要的留下,不要的删除。如下:
world 2017-03-23 22:45:52 master update dev update
合并后的文件就如上面。