繁体   English   中英

无法 git 拉取:在 ff4e1bf(最新 ec2 实例列表)中删除文件并在 HEAD 中修改。 文件的版本 HEAD 留在树中

[英]Unable to git pull: file deleted in ff4e1bf (Latest ec2 instance list.) and modified in HEAD. Version HEAD of file left in tree

我试图在我的 git 存储库中删除一个文件,现在我不能再执行 git 拉取操作了。

我要删除的文件是: aws_scripts/source_files/aws_accounts_list/aws_accounts_list.csv

现在,当我执行 git 拉动时,我得到:

CONFLICT (modify/delete): aws_scripts/source_files/aws_accounts_list/aws_accounts_list.csv deleted in ff4e1bf (Latest ec2 instance list.) and modified in HEAD. Version HEAD of aws_scripts/source_files/aws_accounts_list/aws_accounts_list.csv left in tree.

完整的错误说:

 git pull origin develop
From github.com:bluethundr/jf_cloud_scripts
 * branch            develop    -> FETCH_HEAD
error: could not apply ff4e1bf... Latest ec2 instance list.
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply ff4e1bf... Latest ec2 instance list.
CONFLICT (modify/delete): aws_scripts/source_files/aws_accounts_list/aws_accounts_list.csv deleted in ff4e1bf (Latest ec2 instance list.) and modified in HEAD. Version HEAD of aws_scripts/source_files/aws_accounts_list/aws_accounts_list.csv left in tree.
Auto-merging aws_scripts/python/aws_tools/ec2_mongo.py

我怎样才能让 git 意识到文件应该被删除并做我需要的 git 拉动?

这就是为什么我鼓励 Git 的新手避免git pull : pull 命令是一个方便的命令,它结合了其他两个 Git 命令。

基本命令是:

  • git fetch ,意思是从其他人那里获得新的提交,然后是
  • 第二个命令:将我在存储库中所做的工作与我的新提交结合起来,将他们在存储库中所做的工作与他们的新提交结合起来

确实,第一步git fetch并没有多大用处,因为获得他们的提交就相当于只是交付了一堆包。 在您打开它们并使用其中的内容之前,它们只是坐在那里。 所以你确实需要两个步骤。 但我认为,出于各种原因,首先自己做会更好。 (不是每个人都同意我的观点。)

第二个命令是事情变得棘手的地方。 您选择要使用的第二个命令:默认为git merge ,但您可以(并且根据上面的消息,确实) select git rebase代替。 任何一种方法都意味着将我的工作与他们的工作结合起来; 不同之处在于组合是如何完成的:

  • git merge将所有内容合并在一个步骤中,使所有原始提交保持不变。 自历史以来,在 Git 中,就是提交,这完全保留了您所做的以及他们所做的。

  • git rebase具有将您之前的提交复制到不同的、新的和一个希望改进的提交的效果。 您的 Git 然后放弃您的原始提交,转而支持这些新的和改进的? 提交。 由于历史,在 Git 中,存储库中的提交,这为您留下了更具可读性的历史。 不过,这有点像历史:这意味着您在他们完成了他们的工作之后才完成了您的工作,而不是与他们的工作并行

在某些情况下,有一些强有力的理由偏爱其中一种。 在您的特定情况下,这些原因可能都不适用,因此任何一种方法都可以。

现在,这里的实际问题是,在 merge-or-rebase 期间,Git 遇到了以下情况:

  • 您完全删除了一个文件。
  • 他们更改了文件。

Git 不确定如何组合这些操作。 也许您想保留更改的文件,或者只保留他们放入的行并删除所有其他行。 也许您希望文件保持被删除。 Git 不愿意自己选择一个答案。 因此,它在操作中间停止。

你的工作是完成手术。 有很多细节,但可能您只想保留文件。 为此,请告诉 Git 通过删除文件git add结果,或使用git rm在文件上保留文件(我发现它更容易记住,但有时会产生同样的抱怨,但效果温和)。 然后告诉 Git 继续操作,不管它是什么。

在您的特定情况下,该操作是一个变基,因此要在解决冲突后继续它,请运行:

git rebase --continue

如果需要,这将 go 复制任何其他提交。 每个步骤都可以有自己的合并冲突(这是一些人更喜欢合并方法的原因之一); 如果是这样,您可能必须解决多个提交的多个冲突。

如果第二步是git merge ,则需要git merge --continue继续合并操作。 (在真正古老的 Git 版本中,这里没有--continue并且您必须运行git commit ,但除非您使用真正旧的 Git 版本,否则您不太可能遇到这种情况。)

一旦完成第二个操作,您的git pull就完成了。

暂无
暂无

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

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