git:无法与上游合并

时间:2013-09-30 14:23:15

标签: git github

我在forked存储库上做了一些更改,我希望从上游覆盖一个文件。上游存储库作为远程存储库添加。当我执行合并时,git告诉我我是最新的:

$ git merge upstream/master master
Already up-to-date.

但是当我运行diff时,git会显示我的分叉存储库中缺少的文件

$ git diff upstream/master origin
diff --git a/Library/Formula/exim.rb b/Library/Formula/exim.rb
deleted file mode 100644
index 48d52cf..0000000
--- a/Library/Formula/exim.rb

有没有让git将丢失的文件添加到我的分叉存储库?

4 个答案:

答案 0 :(得分:2)

Upstream有文件。你从上游获得它并删除它。没有更改与删除的3向合并是删除,因此合并后文件仍然不存在。一旦upstream/master完全合并(在给出第一个列出的输出的情况下),再次合并是一个无操作,因为merge只考虑更改,因为分支是最后一次合并而另一边没有。

你想要:

  • 还原您删除文件的更改:

    git log -- Library/Formula/exim.rb
    

    将告诉您删除文件的修订版本,而不是

    git revert <revision-id>
    

    将其还原。

  • 从上游获取文件内容并再次添加:

    git cat-file blob upstream/master:Library/Formula/exim.rb > Library/Formula/exim.rb
    git add Library/Formula/exim.rb
    git commit
    

答案 1 :(得分:1)

我认为你应该像你这样合并到你当地的主人:

git checkout master
git pull origin/master  # in case there are changes posted remotely
git pull upstream/master

之后,您可以使用以下命令将本地主人推送到远程origin

git push origin master

此时upstream/master应合并到master,该origin/master应该等于git diff upstream/master origin


如果您希望它们相同,那么您的diff命令没有多大意义:

origin/master

这会将upstream/mastermaster进行比较,但是如果您在分叉后对upstream进行了更改,并且您无法控制{{1}}这些更改不相同,那么好像你期待它们。

答案 2 :(得分:1)

您将upstream/masterorigin/master进行了比较,但将upstream/master合并为master。看起来你在upstream repo(GitHub上的原始回购)和origin(你在GitHub上的分叉回购)之间感到困惑。

合并后的更改仍然是本地的,如果您想让它们显示在origin中,则需要推送它们:git push origin master

从图形上看,你在开始就有这种情况:

A----B 
\    ^master and origin/master
 \---C 
     ^upstream/master

合并后:

A----B-----------------D
\    ^origin/master   /^master
 \---C---------------/ 
     ^upstream/master

回到origin后:

A----B-----------------D
\    ^                /^master and origin/master
 \---C---------------/ 
     ^upstream/master

答案 3 :(得分:0)

git merge命令未更新上游仓库。你告诉git将上游的更改合并到你的本地,因为你已经拥有了本地上游的所有提交,所以没有什么可以提交的。

您希望“推送”您的更改。运行git push upstream master

http://www.lornajane.net/posts/2012/pushing-to-different-git-remotes

对于您的分叉回购,您只需要git push origin master来推送主分支或只是一个简单的git push