无法将主分支从原点拉到本地(已修改)仓库

时间:2017-06-01 21:21:08

标签: git github

我知道这里已经发布了一个非常相似的问题:

Updating a local repository with changes from a github repository

然而,该页面没有回答我的问题。本质上,我用一些新文件更新了我的GitHub仓库,并在机器上编辑了一些旧的仓库。现在,我在另一台机器上有一个旧版本。如何更新旧版本?

这是我的错误消息。我跑了sudo git pull origin master

error: Your local changes to the following files would be overwritten by merge:
    test.py
Please commit your changes or stash them before you merge.
error: The following untracked working tree files would be overwritten by merge:
    README.txt
Please move or remove them before you merge.
Aborting

然后我跑了

git commit -m "idk this is old but i have to commit n e way even though i just want to update from master?"

因为我本来应该做出改变或者“隐藏”我尚未学到的东西。另外,我不知道如何处理README.txt,所以我现在就离开了。

[master 16b204e] idk this is old but i have to commit n e way even though i just want to update from master?
 3 files changed, 11 insertions(+), 3 deletions(-)
 create mode 100644 README
 create mode 100644 README.txt

我跑了

sudo git pull origin master

但我收到了这个错误:

From https://github.com/bobhob314/fright-before-christmas-clone
 * branch            master     -> FETCH_HEAD
Auto-merging test.py
CONFLICT (content): Merge conflict in test.py
Automatic merge failed; fix conflicts and then commit the result.

我想知道为什么会这样。这有可能吗?我不记得这是不是发生了什么。

  1. 我在机器A上安装了第1版。我将版本1推送到GitHub。
  2. 我将版本1从GitHub克隆到机器B.我编辑了本地仓库并将其推送到GitHub,重写版本1.我们将调用此版本2.现在我在GitHub上有版本2,在机器B上有本地仓库
  3. 我在机器A上将版本1编辑为“版本3”。 (我假设的步骤导致错误)
  4. 我试图将版本2从GitHub拉到机器A的版本3,但它没有用。
  5. 我并不完全了解git的引擎盖机制,所以请帮我弄清楚出了什么问题。

    谢谢!

3 个答案:

答案 0 :(得分:3)

你有一个所谓的“合并冲突”

基本上,你有一个文件已被2种不同的来源以2种不同的方式修改过,而Github不知道你想要的版本是哪个文件,因为它们之间的变化是相互冲突的。

根据您所描述的内容,您的“版本2 ”和“版本3 两者更改了相同的行test.py,现在Github不确定要使用哪个版本。

解决此问题的方法是进入受影响的文件(在本例中为test.py)并修复冲突。你会看到类似的东西:

>>>>>>>>>>> HEAD
<code that's on the server (version 2)>
======
<code that you modified locally (version 3)>
<<<<<<<<<<< [commit hash]

修复后,您可以创建合并提交并将其重新启动

@TimeSheep在how to resolve merge conflicts上发布了指向一个很好的问题的链接,其中说明您可以安装/使用mergetool等工具来帮助您解决这些冲突

答案 1 :(得分:2)

合并问题,我讨厌他们......

快捷方式:您将覆盖最旧的代码计算机中的本地更改。

git fetch --all
git reset --hard origin/master

这都是老兄!

答案 2 :(得分:1)

你是正确的,因为第3步导致错误。这是一个合并冲突,这意味着git不知道如何生成包含版本2和版本3中的更改的文件。

您需要做的是解决此冲突。有几个很棒的工具可以帮助你做到这一点。我建议调查GitKraken(冲突处理是付费功能,学生免费),KDiff或P4Merge(适用于Perforce Helix,但也支持git)。您可能已经安装了一个好工具,在这种情况下,只需运行git mergetool即可开始解决冲突。

您也可以使用简单的文本编辑器解决冲突,如另一个答案中所建议的那样,但是如果您做了很多更改,那么使用GUI来完成这项工作会有很大的帮助。

如果您想了解有关解决合并冲突的更多信息,建议您查看以下问题:How to resolve merge conflicts in Git?