忘记在开始工作前进行 git pull,现在无法进行 git push。

8

我刚接触GIT,正在学习中。我在两台不同的电脑上工作,最终发生了这样一件事,我忘记在开始工作前执行git pull操作。当我尝试执行git push时,出现了以下错误:

![rejected] master -> master (fetch first) error: failed to push some refs to ...

我尝试执行git pull,并得到以下结果:

CONFLICT (content): Merge conflict in Project.html Automatic merge failed; fix conflicts and then commit the result.

现在,我正在处理的文件有些混乱。我该如何修复它以便再次推送?除了不要忘记在开始工作前执行git pull操作外,我应该怎么做才能把它弄好呢?感谢大家的时间和努力。

2个回答

5
使用特性分支是使用git的最常见方法之一。其思想是每次开始新功能时创建一个新的分支,完成功能后将其合并到“development”分支中。理想情况下,您可以通过Pull Request将您的分支合并到“development”分支。
有时候,在开始工作之前可能会忘记创建新的分支,并在“development”分支上创建一些提交。
如果是这种情况,您可以从当前分支创建一个新分支,然后将原始分支重置为原始状态。
例如,如果您在“development”分支上添加了一些不应该存在的提交,则应执行以下操作:
使用git checkout -b new_feature_branch创建基于开发分支的新分支。
使用git checkout development返回到开发分支。
使用git reset --hard origin将开发状态重置为原始状态。
使用git checkout new_feature_branch返回到开发分支。
使用git merge development尝试从开发分支获取新更改。这也可以使用git rebase development完成。
之后,根据您的工作方式,您可以将分支推送到git服务器,然后创建Pull Request,或者再次转到开发分支,在控制台中合并来自new_feature_branch的更改。

5
当您pull时,git发现您所做的新更改影响了与尚未pull的更改相同的代码部分。这就是为什么它生成了“CONFLICT”消息的原因。
虽然这不是源代码控制中任何人最喜欢的部分,但冲突(以及冲突解决)是该过程的正常部分。它们不一定意味着有任何问题。如果您独自工作并且可以以非常线性的方式开发,则可以尝试通过某些纪律来避免冲突。但是,虽然git肯定可以处理这种情况,但git的重要之处在于它也可以处理非线性情况(包括许多贡献者的努力,他们可能松散协调)。
您说“混乱”的文件包含冲突标记。如git提示所示,git希望您编辑受影响的文件以决定文件应该如何显示,同时考虑到两个更改尝试。 (如果您执行git status,则会提醒您哪些文件尚未处理。)
因此,您可能会在文件中看到类似以下内容:
<<<<<<< HEAD
This is the result of the local edits to this section of code
-------
This is the result of the edits you are trying to merge in
>>>>>>> other_branch

您需要检查一下,找出一个代码块,能够同时实现您在这两种情况下想要做的事情,然后用它来替换原来的代码。

This is the result of applying all the changes in a way that work together

不再有冲突标记,代码变得更加统一。对于每个冲突标记,进行此操作:保存文件,git add 文件,当 status 显示所有问题都已解决 / 已暂存后,即可完成合并。


1
谢谢。这是一个非常简洁的答案。我希望有一些“git魔法”,可以将我在PC1上自上次拉取以来所做的所有更改“放在一边”,然后进行拉取...哦,我现在明白了为什么这样不起作用,因为git不能神奇地知道我想要保留什么。再次感谢,我会开始整理事情。 :) - Des
顺便问一下,大团队的人是如何解决这个问题的?看起来会很混乱! - Des
@Des - 你可以使用类似于git stash的方法将更改“放在一边”,但正如你在讨论中意识到的那样,你仍然需要解决冲突(当应用存储时)。实际上,冲突似乎并不像你预期的那样经常出现/引起问题。协调涉及所有代码的重大更改的方式可能很重要,但除此之外,我很少听说团队专门将其视为需要解决的问题。我想适当的分支策略有助于项目。 - Mark Adelsberger
很好知道Git可以帮助你处理这些合并。当出现这种情况,你有大量的文件存在冲突时,你也可以告诉Git以--theirs --ours的方式解决冲突,保留其中一个副本。更多细节请参考https://dev59.com/SGgv5IYBdhLWcg3wTvE-#10697551,因为这是一个较大的主题,而这个线程解释得更容易理解。 - user337598

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