我有多个工作目录和一些存储库,并且希望让一个存储库与另一个特定存储库位于同一点,而不会合并任何本地更改。也就是说,我有这个布局
目前的状态是:
现在我需要的是让D与A中的当前分支处于相同的状态,而不是来自B的更改。我会做什么呢?
A> git push D master:alternate
D> git pull
D> git checkout alternate
但是这些文件仍然包含来自B的更改。如何在D上获得分支,并将工作副本作为A中的确切修订?
注意:目录D不在同一台机器上,不能直接访问A或B,只能通过C。
答案 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 的提交数量。如果有很多代码,那么重新定位和合并将是有意义的。