gpt4 book ai didi

git - 在 git rm 文件之后;提交——如何从远程分支取回文件?

转载 作者:太空狗 更新时间:2023-10-29 12:52:49 25 4
gpt4 key购买 nike

我正在 pull 入我的 .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。我想用我 pull 入的文件完全替换本地文件,所以这似乎有点明智......所以我做了 git rm elisp/dired-details+.el混帐 merge 。我得到:

git merge: fatal: 你还没有结束你的 merge (MERGE_HEAD 存在)。请在 merge 之前提交您的更改。

好的,很好:git commit -a -m "ugh merge conflicts"; git pull origin master.

现在一切都很好,除了我缺少 dired-details+.el,我有点困惑,我想知道以下问题的答案:

  1. 如何撤消 git-rm 并从远程分支获取该文件?..
  2. 为什么一开始会发生冲突?.. add/add 是怎么回事?..
  3. 我应该怎么做而不是 git-rm'ing 我想替换的文件?..

最佳答案

首先,使用 git reset --hard HEAD^ 撤消 merge 提交。请注意,这将清除最后一次提交并将您的工作副本重置为之前提交的状态,因此在执行之前请务必了解这将做什么。 gitk 可以帮助将其可视化。

其次,git rm 没有按照您的预期执行。当您遇到 merge 冲突时,您正在查看处于半 merge 状态的文件,该文件包含冲突标记供您解决冲突。此时,系统会要求您将工作副本修复为您希望最终 merge 提交看起来的状态。通过删除该文件,您告诉 git 您根本不希望该文件再存在,这不是您想要的。

在此阶段您需要做的是将工作副本中的冲突文件更新为您要保留的版本。通常这是通过检查冲突标记并相应地调整文件来完成的。在你的情况下,如果你确定你想要从你 merge 的分支中获取副本,你可以使用 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 用于 merge 的“您的”一侧。

关于git - 在 git rm 文件之后;提交——如何从远程分支取回文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4613500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com