繁体   English   中英

git rebase 合并冲突错误,选择删除而不是创建文件

[英]git rebase merge conflict mistake, selected deleted instead of created file

git rebase origin/main期间,我遇到了合并冲突。 本地分支中不存在文件,但在主分支中。 然后我运行git mergetool它问我想做什么:

Merging:
src/CMakeLists.txt

Deleted merge conflict for 'src/CMakeLists.txt':
  {local}: created file
  {remote}: deleted
Use (c)reated or (d)eleted file, or (a)bort? d

我选择了(d)eleted file ,这是错误的。 在我继续 rebase 之后,我发现文件丢失了。

然后我使用git checkout origin/main src/CMakeLists.txt丢失的文件,这样我就可以恢复文件。 但是,提交历史现在有一个意外的额外提交,如果可能需要进一步的 rebase,这可能会导致问题。 我只想撤消我的决定,以便提交历史记录与我首先选择正确答案一样。

如果只是在您的所有历史记录中保留CMakeLists.txtorigin/master版本:

  • 运行git rebase -i origin/master
  • 在操作列表中,在第一次提交后立即添加break指令,保存并退出
  • git rebase停止时,运行git checkout origin/main -- src/CMakeLists.txt
  • 运行git rebase --continue
  • 如果您对该文件有冲突,您知道始终可以运行git checkout origin/master -- src/CMakeLists.txt来恢复该版本
  • 你可能有git rebase停止,因为没有为特定提交留下任何更改,在这种情况下运行git rebase --skip以跳过重播该提交

另一方面,如果您对要保留和恢复的文件进行了修改:

  • 检查您的 reflog: git refloggit reflog my/working/branch
  • 在运行 git之前发现分支的git rebase
  • 回到那个点: git reset --hard <sha>
  • 再次运行git rebase origin/master

git reset --hard上的一般警告:
在干净的工作树上运行它,它是 git 中为数不多的命令之一,可以从磁盘中删除一些文件或修改,而不会将它们存储在 git 中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM