我最近有一个 问题回答 关于多计算机git开发设置,我到那里的解决方案确实解决了我的情况 master
分支,但不是基于主人的侧枝。
这是我目前的设置:
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略有不同,我将使存储库更加不同步。
如何在原始状态和第三个状态的远程存储库中获取本地存储库,并更新本地存储库以与远程存储库完全匹配(删除更改E-H并移动HEAD BUG_37
到新的位置)?
我不会在已经共享的分支上进行变基数。虽然它导致了最干净的历史,但它将改变所有提交的哈希值 BUG_37
。所以在目标机器上,你需要删除 BUG_37
完全再拉它。这可以做一次或两次,但不如常规工作流程。
合并会容易得多 master
成 BUG_37
;然后可以将合并提交(修复冲突的位置)推送到其他计算机,并且不需要删除分支。
删除分支,然后从远程存储库中提取两个分支。
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
我正在遵循相同的工作流程,基本上是在笔记本电脑和台式机之间切换。我把主要的回购放在桌面上,笔记本电脑克隆了桌面的回购。最终它们不同步,因为我想在更新后重新定义我的主题分支 master
。
简单的答案,就是不要使用git,而是使用 rsync
保持你的回购同步。如果你知道你是唯一一个正在研究它的人,那么这是有道理的。
好吧,我也不是那个解决方案的忠实粉丝。所以,这可能有点“干净”。在笔记本电脑上,当从桌面的回购中拉出重新分支的分支时:
git co topic
git fetch origin/topic
git reset --hard origin/topic
这将丢弃任何不在桌面repo上的提交,因此请确保您真的想要这样做。
而且,你可能只是 git pull
笔记本电脑 master
分支,因为它应该永远是快进的,因为你可能不需要改变它。我认为重新定义主题分支是有意义的,因为否则试图将其合并到主人的最后是一个痛苦。
我刚刚尝试过它并使用它 git pull --rebase
从一个重新分支的分支中拉出来的。没有 --rebase
标志,提交将被复制,但与 --rebase
提交没有重复。