git rm file; commit后如何从远程分支获取文件?

8

我正在拉取我的.emacs目录,并遇到以下冲突:

CONFLICT (add/add): Merge conflict in elisp/dired-details+.el

Git状态显示如下:

 Unmerged paths:
 #   (use "git add/rm <file>..." as appropriate to mark resolution)
 #  both added:         elisp/dired-details+.el

好的,所以git建议使用git rm。我想完全用拉取的文件替换本地文件,所以这似乎有点合理...所以我执行了git rm elisp/dired-details+.elgit merge。我得到了: < p > git merge: fatal:您还没有完成合并(MERGE_HEAD存在)。请在合并之前提交您的更改。

好的,很好:git commit -a -m“ugh merge conflicts”git pull origin master
现在一切都很好地合并了,除了我缺少dired-details+.el,我有些困惑,并且我想知道以下问题的答案:
  1. 我如何撤消git-rm并从远程分支获取该文件?..
  2. 为什么首先会有冲突?..这里发生了什么add / add?..
  3. 我应该怎么做才能代替git-rm所需的文件?..
1个回答

9
首先,使用git reset --hard HEAD^撤销合并提交。请注意,这将清除最后一次提交并将您的工作副本重置为上一个提交的状态,因此在执行此操作之前,请仔细理解它将要做的事情。 gitk可以帮助可视化此过程。
其次,在此处git rm无法达到您的预期效果。当您遇到合并冲突时,您正在查看文件的半合并状态,其中该文件包含冲突标记以供您解决冲突。此时,您需要修复工作副本以使其达到您想要的最终合并提交状态。通过删除该文件,您告诉git您不再需要该文件存在,而这不是您想要的结果。
在此阶段,您需要更新工作副本中的冲突文件以保留所需版本。通常,这是通过检查冲突标记并相应地调整文件来完成的。如果您确定要从您要合并的分支中获取副本,则可以使用git show :3:elisp/dired-details+.el > elisp/dired-details+.el来执行此操作。然后使用git add elisp/dired-details+.el告诉git您已经解决了该文件中的冲突,最后使用git commit完成操作。
在此处,git show :3:...请求从MERGE_HEAD获取文件的版本。如果您需要不同的版本,则还可以使用1表示共同祖先或2表示“您”的合并方面。

事后看来,这一切都显得很明显。我不知道:n:符号,它似乎非常有用。 - Leo Alekseyev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接