如何从不同的git存储库切换到头/分支

时间:2012-02-12 12:10:04

标签: git

我有多个工作目录和一些存储库,并且希望让一个存储库与另一个特定存储库位于同一点,而不会合并任何本地更改。也就是说,我有这个布局

  • A:工作主持人
  • B:工作Dir
  • C:base repo
  • D:工作目录

目前的状态是:

  • B在某个时候从A克隆,它已经发散(如A)
  • B被推到C,D从C克隆,因此D是B
  • 的副本

现在我需要的是让D与A中的当前分支处于相同的状态,而不是来自B的更改。我会做什么呢?

A> git push D master:alternate
D> git pull
D> git checkout alternate

但是这些文件仍然包含来自B的更改。如何在D上获得分支,并将工作副本作为A中的确切修订?

注意:目录D不在同一台机器上,不能直接访问A或B,只能通过C。

2 个答案:

答案 0 :(得分:0)

如果我直截了当,A和B不是“主人”。如果他们分歧了,为什么不为他们创建不同的分支?我真的不明白在同一台计算机上需要两个工作存储库。 Git可以为您处理,而无需在整个硬盘中复制数据。这正是版本控制之美。

尽管如此,我也不明白为什么简单地创建一个不同的分支并不能解决它。如果A和B不同,为什么要将它们保持在同一个“分支”上?

A> git checkout -b my_branch_A
A> git commit -a -m "whatever you have to commit"
A> git push D my_branch_A

D> git checkout origin/my_branch_A

通过这样做,你将拥有你的回购A。

答案 1 :(得分:0)

好吧,我没有完全按照您管理代码的方式,所以我会再次列出您的结构。启动时有 TWO 工作存储库, C ORIGIN 的存储库。

您是从 A 创建 B 并同时处理它们。您在 A B 上都有很多提交。然后,将 B 推送到 ORIGIN (在本例中为C)并从 ORIGIN 创建分支 D 。现在,您希望在 A 中完成的更改位于 D 中。

嗯,首先,这些分支的快照完全不同。我建议你切换到分支 D git checkout D,然后从 A git cherry-pick <commit-hash>中选择提交

Cherry pick是将代码更改从一个分支更改为另一个分支的最安全方法。当然,这还取决于您希望进入 D 的提交数量。如果有很多代码,那么重新定位和合并将是有意义的。