“此拉取请求包含必须解决的合并冲突。”

时间:2014-10-07 17:07:07

标签: git github

我在使用PR时遇到了这个错误,但是当我git status时它显示为nothing to commit, working directory clean

那是PR的分支机构。

On branch pr12
nothing to commit, working directory clean

2 个答案:

答案 0 :(得分:20)

git status告诉您工作目录树的状态以及相对于当前分支上最新提交的索引(暂存更改) 。您看到的输出意味着磁盘上的文件与分支上​​的最新提交完全匹配。也就是说,“无需承诺”。

来自GitHub的消息不是关于提交,而是关于合并。 GitHub希望为您提供一键式方法将此分支合并到您的master分支中,但它不能,因为该合并会导致冲突。由于GitHub无法通过网站帮助您解决冲突,因此它会要求您在自己的计算机上解决冲突。

处理这种情况的最佳方法是将当前主分支合并到本地主题分支,然后将结果推送到GitHub。为此,请执行以下操作:

$ git checkout pr12  # If you're not already on pr12
$ git fetch origin
$ git merge origin/master

(我假设GitHub遥控器被称为origin。它通常是,你可能知道它是不是。)

首先,我们确保我们在正确的分支上。然后我们确保我们拥有GitHub仓库中master分支的最新代码。然后我们将该代码合并到我们的pr12分支。

请记住:git fetch origin更新我们的本地origin/master与GitHub的master相同,但它不会触及名为master的本地分支。我们必须检查我们的master分支以对其进行更改。相反,我们只是更新我们对GitHub上的内容的想法(origin/master)并将其合并到我们的pr12中。

运行merge命令时,您会看到冲突。那些代表git(和GitHub)无法自动生成的决定。编辑这些文件,使它们成为您希望它们结束的方式。然后:

$ git add each/file.txt that/had/conflicts.conf
$ git commit   # Your editor will open with a pre-filled
               # commit message. Just save and close the file.
$ git push origin pr12

也就是说,我们添加了我们修复的文件版本,然后完成了我们从git merge开始的合并提交。最后,我们使用新的合并提交将分支推送到GitHub。

由于我们已经解决了冲突,因此这个分支应该很容易以另一种方式合并到master中。 GitHub会注意到这一点,并给你一个绿色的“合并”按钮。

答案 1 :(得分:8)

当我遇到此消息时,这是因为我的特定仓库的 fork 落后于原始版本。在我的特殊情况下,我分叉的回购是pydata/pandas

我必须做configure a remote for my fork

> git remote add upstream git@github.com:original_user/original_repo.git
> git remote -v
origin  git@github.com:some_user/pandas.git (fetch)
origin  git@github.com:some_user/pandas.git (push)
upstream    git@github.com:pydata/pandas.git (fetch)
upstream    git@github.com:pydata/pandas.git (push)

(注意:git remote add upstream是一种git的说法“添加一个名为”上游的遥控器“。这个名字可以是任何东西。)

然后我fetched the latest commits来自原始仓库:

> git fetch upstream
> git checkout master # Just in case you're not already on master
> git merge upstream/master

最后将合并后的repo推回到github:

> git push