用惯了 svn 的人,使用 Git 的时候,pull 命令可能会提示下面错误:
Git Pull Failed
Your local changes would be overwritten by merge.
Commit, stash or revert them to proceed.
View them
意思是说你本地改了一些东西,拉代码时有冲突,需要解决这些。
如果此时你提交本地的修改,又会提示你先 pull,有的人可能就要骂娘了。
其实没必要,使用 stash 命令可以搞定这些。
git stash
git pull
git stash pop
stash 这个词是隐藏的意思,这里面可以理解为创建了一个本地的备份:
git stash
: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到 Git 栈中。git stash pop
: 从 Git 栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个 Stash 的内容,所以用栈来管理,pop 会从最近的一个 stash 中读取内容并恢复。
然后手动修改冲突后提交。手动打开文件后会发现,代码会被<<<<<<<<<
、========
、>>>>>>>>>
等包围,这是冲突标记。
关于冲突标记:<<<<<<
和======
之间的内容是别人修改的,========
与>>>>>>>>>
之间的内容是本地自己修改的。
至此,本文就结束了。
什么?这还看不懂?蛤?你不用 git 命令,而是习惯了开发工具集成的界面操作?
好,那就写更细一点:
1.现有本地文件:
别人(队友)改成了这样:
而且队友已经提交了,所以 master 上改成了dkehfkdf别人
,而我们本地也动了这个文件,改成了这个样子:
这时候如果执行 pull 会报错,试试 stash,这样:
2. Stash Changes
然后弹个窗让你输入该备份的名称(可以不填):
我这里起名叫 20190920pull,点击 create stash
3. pull 代码
此时不会提示错误了。
4. Unstash Changes
不捉迷藏了,本地代码和 pull 下来的代码见见面。会提示:
可以看到 stash@{0},stash@{1},stash@{2} ,1 和 2 是我之前弄得,这里我们只管 stash@{0},也就是上面 git 命令对应的 git stash pop
,点击下面的 Apply Stash:
这个应该能看懂,选别人的,我们的,还是手动 merge,我们当然选择 merge,这是弹出一个让人舒服的界面:
左边是 pull 下来的,右边是 stash 的,中间是最终的结果,需要手动修改。
多说几句,如果你不喜欢这么漂亮的界面,也可以用另一种方法(最终效果同上),手动打开冲突的文件:
代码会被<<<<<<<<<
、========
、>>>>>>>>>
等包围,这是冲突标记。
关于冲突标记:<<<<<<
和======
之间的内容是别人修改的,========
与>>>>>>>>>
之间的内容是本地自己修改的。
改成你想要的样: