[英]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.