git解决冲突后提交覆盖代码的问题?

git提交前先fetch一下,然后merge的时候提示有冲突,然后把自己的一个冲突的文件提交到本地仓库,再merge提示那个文件冲突,然后手动解决冲突后提交了那个文件,结果之前别人提前的代码被还原了,请问大家是什么原因出现这种情况?是解决冲突后提交只提交了自己的那个文件会导致其他之前别人提交的文件被还原吗?

阅读 1.5k
2 个回答

在Git中,当你在合并(merge)过程中解决冲突并提交后,如果发现别人的提交被还原,这通常是因为你在解决冲突时未能正确地保留和合并所有的更改。这种情况可能发生在以下几个步骤:

  1. Fetch 最新代码:你从远程仓库中获取了最新的更改。

    git fetch
  2. Merge 导致冲突:你尝试合并远程分支到你的本地分支时,出现了冲突。

    git merge origin/branch_name
  3. 处理冲突:你解决了冲突并提交了冲突文件。

    git add conflict_file
    git commit -m "Resolve merge conflict in conflict_file"
  4. 误提交或遗漏提交:如果你只提交了那个解决冲突的文件,而没有检查和提交其他有冲突的文件或改动,这可能导致其他人的提交被覆盖。

当你在解决冲突时,如果只提交了解决冲突的文件,而忽略了其他文件的更改,那么在合并完成后,Git可能会将这些文件还原到冲突解决前的状态。具体来说,当你解决冲突并执行提交时,Git会认为你当前的提交就是最终版本。如果你没有正确合并其他文件的改动,这些改动就会丢失。

正确处理冲突的步骤应该是

  1. Fetch 和 Merge

    git fetch
    git merge origin/branch_name
  2. 解决所有冲突

    • 打开每个冲突文件,手动解决冲突。
    • 确保保留了所有应该保留的更改,包括你自己的和别人的。
    • 检查每个冲突文件,确保它们在解决冲突后包含了所有需要的更改。
  3. 添加所有解决了冲突的文件

    git add resolved_file1 resolved_file2 ...
  4. 提交解决冲突后的状态

    git commit -m "Resolve merge conflicts"

通过这种方式,你确保了所有的更改都被正确保留并合并,而不会丢失其他人的改动。

总结来说,问题可能出现在你在解决冲突后只提交了某个特定文件,而没有处理或检查其他文件的更改。确保在解决冲突后,所有文件的更改都被正确地检查、解决和提交。

一般是自己拉出开发分支去开发,本地开发完成之后fetch主线分支(master/dev分支),自己的分支 rebase 主线最新的提交。这样会把主线的提交更新到自己本地开发分支上面,此时如果有冲突就会提醒你解决。这时候冲突解决会在你自己提交上面操作,只会修改你的提交代码,就不会影响到你同事的提交内容了。
解决完全部冲突之后,切回到主线分支合并你的本地开发分支。这时候因为冲突已经全部解决了,所以用 merge 还是 rebase 效果都是一样的。合并完成之后把主线push到远端。可能有一些团队需要提交 PR/MR 的形式来合并,那就按照团队流程操作就行了。


你现在的情况应该是 merge 的过程中解决冲突的时候不小心把同事的代码覆盖掉了或者舍弃掉了?reset 回到你操作之前的 Commit hash 上面,重新按照上面提到的方式操作一次就好了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进