记录 Git 文件冲突的处理过程。

0x00

报错 Your local changes to the following files would be overwritten by merge

该报错在 git pull 时出现,一句话解释就是你在本地改动了代码但是还没有提交,此时再拉取最新代码,远程代码和你当前的本地代码发生冲突!(注意有冲突时才会提示,如果没有冲突,则 git pull 成功,因为 git pull 实质上就是一个远程分支 merge 到本地分支过程。

解决方案

方法一:本地代码 commit 后再 pull(推荐)

# 先把当前修改的工作区内容提交了
git add .
git commit

# 拉取最新代码,这里就相当于两个已提交分支的合并了,有冲突解决冲突,没冲突就pull成功
git pull

# 解决完冲突后,继续完成自己的本地代码

# 完成以后,add/commit/push三连到远程库
git add
git commit
git push

***这样就实现了开发过程中,将远程最新改动合到了我本地,然后我基于最新代码接着开发
***该方法的缺点是会多出一条额外提交记录(pull之前的这次提交)

方法二:使用 stash

# 备份当前的工作区的内容,让工作区变为和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中
git stash

# 拉取最新代码(依然有可能有冲突,如果有就手动解决冲突)
git pull

# 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容
# 这样就相当于是基于远程库最新版本修改了
git stash pop

***注意,最后恢复暂存区的时候可能与最新代码有冲突,此时仍需要手动解决冲突
***该方法虽然没有多余提交记录,但稍微麻烦一点

0x01

报错 please move or remove them before you can merge

在项目根目录下运行 git clean -d -fx .

x —– 删除忽略文件已经对 git 来说不识别的文件
d —– 删除未被添加到 git 的路径中的文件
f —– 强制运行

0x02 直接修改上一次的 git commit

review 过后要改代码,但就是不想再额外加一个 commit,这样搞的话很多 commit 很杂乱,也要重新写 commit message 比较麻烦

1、改完代码后,add:

git add 你的代码文件

2、然后

git commit --am

3、此时应该会弹出 vim 编辑器界面,里面内容是你上次 commit 的 message 内容

直接 :q 退出就好,因为我们就是要原封不动的使用上次的 message

4、最后 git push

会发现 commit 没有增加,上一次的 commit 的 diff 已经应用上了你刚才的代码修改