merge时你在工作区修改的文件将被覆盖
1、产生原因
这种情况一般是你在A分支修改了一些代码,git add到了暂存区。这时你想同步主干分支的代码,如果主干分支有其他人和你修改了相同位置,那么你在拉取主干分支时就会报这个错误。
2、简单示例
下面通过一个简单的例子看下这个错误是如何产生的。
小明在readme.txt文件中添加了一句话:my name is master
然后提交到了主干分支
小花在自己的分支,也是在readme.txt文件的相同位置,添加了这样一句话:my name is A,并且git add到了暂存区,这时候小花想同步主干分支的代码
lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/repo1/repo (A)
$ git pull origin master
From https://gitee.com/lingpe/repo
* branch master -> FETCH_HEAD
error: Your local changes to the following files would be overwritten by merge:
readme.txt
Please commit your changes or stash them before you merge.
Aborting
Updating 23bdcc9..27beac0
拉取时就会报这个错误。
3、解决方案
git stash #备份工作区内容
git pull origin <branch> #拉取远程分支
git stash pop #恢复工作区内容
具体看下以下操作
lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/repo1/repo (A)
$ git stash
Saved working directory and index state WIP on A: 23bdcc9 提交
lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/repo1/repo (A)
$ git pull origin master
From https://gitee.com/lingpe/repo
* branch master -> FETCH_HEAD
Updating 23bdcc9..27beac0
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 readme.txt
lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/repo1/repo (A)
$ git stash pop
CONFLICT (add/add): Merge conflict in readme.txt
Auto-merging readme.txt
The stash entry is kept in case you need it again.
lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/repo1/repo (A)
$ cat readme.txt
<<<<<<< Updated upstream
my name is master
=======
my name is A
>>>>>>> Stashed changes
lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/repo1/repo (A)
$ vim readme.txt
lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/repo1/repo (A)
$ cat readme.txt
my name is master
my name is A
lng@DESKTOP-9TD21KL MINGW64 ~/Desktop/repo1/repo (A)
$
我们先把A分支修改的代码做一个备份,再拉取主干分支代码,再恢复本地的代码。这个时候会提示与主干分支代码产生了冲突,我们只需要手动解决冲突就可以了。这样就成功同步了主干分支的代码。
|