0

我对我的分叉存储库进行了一些更改,我希望覆盖上游的单个文件。上游存储库被添加为远程。当我执行合并时,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

4 回答 4

2

上游有文件。您从上游获得并删除了它。无变化与删除的三向合并是删除,因此合并后文件仍然不存在。一旦upstream/master完全合并(这是给定您第一个列出的输出的情况),再次合并不是操作,因为合并只考虑自上次合并分支以来的更改,而另一侧没有。

您想要:

  • 恢复您删除文件的更改:

    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
    
于 2013-09-30T15:02:42.977 回答
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


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

git diff upstream/master origin

相比之下origin/masterupstream/master但是如果您master在分叉后对您的内容进行了更改,并且您无法控制upstream这些不能相等,那么您似乎期望它们是相等的。

于 2013-09-30T14:30:07.877 回答
1

您正在与 比较upstream/masterorigin/master但要合并upstream/mastermaster. 看起来你对upstreamrepo(GitHub 上的原始 repo)和origin(你在 GitHub 上的分叉 repo)感到困惑。

合并更改后,它们仍然是本地的,如果您想让它们出现在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
于 2013-09-30T14:34:10.697 回答
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

于 2013-09-30T14:30:23.790 回答