Git - 从克隆中拉取更改并合并到主分支

5
我克隆了一个Git主分支,并在克隆中进行了许多更改。我已经提交了这些更改,并希望主分支成为与克隆中相同的副本。
我尝试了在克隆中使用Git push将更改推送到主分支,但是无论我做什么都不能更新主分支。
如何使主分支成为与克隆中完全相同的副本?更新克隆并使主分支与克隆同步的命令工作流程是什么?
3个回答

6
有两种 git 仓库,裸库和非裸库。非裸库是指任何具有“工作副本”的仓库,即当前检出了仓库的一部分。
你可以向非裸库推送,但是即使所检出的分支与你推送的分支相同,它也不会更新检出的工作副本。这是因为被检出的副本可能有未提交的更改,而 git 不会在没有明确要求的情况下销毁更改(通常这些命令都有一个 --hard 参数)。
阅读 Why won't I see changes in the remote repo after "git push"?How would I use "git push" to sync out of a firewalled host? 以全面了解问题和潜在解决方案。警告⚠️:如果你已经向远程仓库推送,那么该远程仓库中的任何未提交更改都必须被丢弃。

一般来说,听起来你想要的方法并没有被Gitter所采用,因为它并不完全符合分布式存储库的理念。确保你的存储库副本是最新的是你自己的责任。


Gareth,感谢您的解释。规范的解决方案是需要一个没有树附加的第三个存储库吗?那不是回到了中央存储库的svn概念吗? - David Nehme
Git 的架构更多地是建立在拉取而不是推送上。当然,可以使用 Git 模拟集中式系统,这就是我们在办公室所做的。对我们来说,Git 的好处在于轻松进行分支管理,而不是源代码控制的分散性质。 - Gareth

5
如果您创建了一个容易从主分支访问的自己的克隆分支,那么您就可以很容易地将更改从克隆分支合并到主分支中。只需执行以下步骤:
git pull /path/to/clone

这将把克隆库中HEAD的更改拉取到主库的HEAD中。

另一个常见的情况是,克隆库位于另一个网络或某些不易从主库直接访问的位置。在这种情况下,您可以使用以下方法之一:

  • 一个公共的存储库,克隆库向其推送,主库从其拉取 (例如:GitHub 或者其他裸仓库)。
  • git-bundle 将更改捆绑为文件进行移动。
  • git-format-patchgit-am 通过电子邮件发送更改。

2

我喜欢Gareth和Greg的答案。我想补充一点,使用裸仓库与他人同步工作非常方便。这样,任何人都可以将其更改(包括分支)推送/拉取到裸仓库中,然后其他人可以根据需要获取/拉取/合并。这不同于具有单个中央仓库,因为每个克隆是一个完整的仓库。


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