问题 重组分支的git同步


我最近有一个 问题回答 关于多计算机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 到新的位置)?


5443
2018-02-07 20:08


起源



答案:


我不会在已经共享的分支上进行变基数。虽然它导致了最干净的历史,但它将改变所有提交的哈希值 BUG_37。所以在目标机器上,你需要删除 BUG_37 完全再拉它。这可以做一次或两次,但不如常规工作流程。

合并会容易得多 master 成 BUG_37;然后可以将合并提交(修复冲突的位置)推送到其他计算机,并且不需要删除分支。


4
2018-02-07 20:36





删除分支,然后从远程存储库中提取两个分支。

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

4
2018-02-07 20:36





我正在遵循相同的工作流程,基本上是在笔记本电脑和台式机之间切换。我把主要的回购放在桌面上,笔记本电脑克隆了桌面的回购。最终它们不同步,因为我想在更新后重新定义我的主题分支 master

简单的答案,就是不要使用git,而是使用 rsync 保持你的回购同步。如果你知道你是唯一一个正在研究它的人,那么这是有道理的。

好吧,我也不是那个解决方案的忠实粉丝。所以,这可能有点“干净”。在笔记本电脑上,当从桌面的回购中拉出重新分支的分支时:

git co topic
git fetch origin/topic
git reset --hard origin/topic

这将丢弃任何不在桌面repo上的提交,因此请确保您真的想要这样做。

而且,你可能只是 git pull 笔记本电脑 master 分支,因为它应该永远是快进的,因为你可能不需要改变它。我认为重新定义主题分支是有意义的,因为否则试图将其合并到主人的最后是一个痛苦。


3
2018-06-29 23:48





我刚刚尝试过它并使用它 git pull --rebase 从一个重新分支的分支中拉出来的。没有 --rebase 标志,提交将被复制,但与 --rebase 提交没有重复。


2
2017-11-20 06:08