我最近有一个关于多计算机git开发设置的question answered,我到那里的解决方案确实用master
分支来解决我的情况,但不是基于主分支的侧分支。 / p>
这是我目前的设置:
A--B--C--D master
\
E--F--G--H BUG_37
BUG_37
是一个分支,它正在为系统中的功能请求开发可选跟踪错误的修复程序,并最终将合并到主行中,但暂时是独立的。如果存储库处于此状态,一台计算机,我对master
分支进行了一些更改:
A--B--C--D--I--J--K master
\
E--F--G--H BUG_37
然后我将BUG_37
分支重新定位到master
,以确保它可以作为对最新更改的增强功能:
A--B--C--D--I--J--K master
\
E1--F1--G1--H1 BUG_37
让我们说rebase有一些冲突需要在rebase最终之前手动修复。如果我将这些更改推送到远程存储库,并且现在希望将更改下载到仍具有原始设置的另一个开发系统,那么最好的方法是什么? git pull --rebase
将再次运行rebase,我将不得不手动完成第一次遇到的冲突,对吧?如果我再次遇到冲突时会出现轻微错误,这样新系统中的E1-H1略有不同,我会让存储库更加不同步。
如何将原始状态的本地存储库和第三个状态的远程存储库,并更新本地存储库以与远程存储库完全匹配(删除更改EH并移动BUG_37
的HEAD到新的位置)?
答案 0 :(得分:4)
删除分支,然后从远程存储库中提取两个分支。
git branch -D BUG_37
git pull origin master
git pull origin BUG_37:BUG_37
如果您不想删除本地BUG_37分支,请确保其有效,请将远程分支拉入另一个本地分支:
git pull origin BUG_37:NEW_BUG_37
答案 1 :(得分:4)
我根本不会在已经共享的分支上进行rebase。虽然它会产生最干净的历史,但它会改变BUG_37
中所有提交的哈希值。因此,在目标计算机上,您需要完全删除BUG_37
并再次将其拉出。这可以做一次或两次,但不如常规工作流程那么好。
将master
合并到BUG_37
会更加容易;然后可以将合并提交(修复冲突的位置)推送到其他计算机,并且不需要删除分支。
答案 2 :(得分:3)
我正在遵循相同的工作流程,基本上是在笔记本电脑和台式机之间切换。我把主要的回购放在桌面上,笔记本电脑克隆了桌面的回购。最终他们不同步,因为我想在更新master
后重新定义我的主题分支。
简单的答案就是不要使用git,而是使用rsync
来保持你的回购同步。如果你知道你是唯一一个正在研究它的人,那么这是有道理的。
嗯,我也不是那个解决方案的忠实粉丝。所以,这可能有点“干净”。在笔记本电脑上,当从桌面的回购中拉出重新分支的分支时:
git co topic
git fetch origin/topic
git reset --hard origin/topic
这会抛弃任何不在桌面回购中的提交,所以请确保你真的想要这样做。
此外,您可能只需git pull
笔记本电脑的master
分支,因为它应该始终是快进的,因为您可能不需要对其进行重新定位。我认为重新定义主题分支是有意义的,因为否则试图将其合并回主人最终是一种痛苦。
答案 3 :(得分:2)
我刚试过它,并且在从一个重新分支的分支中使用git pull --rebase
时起作用。如果没有--rebase
标志,则提交将被复制,但是--rebase
提交不会被复制。