如何从git存储库获取最新信息并在分支上应用重新排序的更改

如何从git存储库获取最新信息并在分支上应用重新排序的更改,git,git-rebase,Git,Git Rebase,一些背景: 我从一个上游存储库分叉。 几周前,我从这家分店找到了一家分店 执行了一些更改,但签入尚未推送 同时,其他一些变化也被推动发展上游分支。 现状 优先级改变了,我在同一个开发分支上开发了另一个特性。我本应该创建一个不同的分支,但我继续添加当前更改顶部的新功能并签入。这意味着我的开发部门有我所有的2周的变化+这一个新功能 我想做什么 我想将上游/开发的准确副本复制到我的当前版本中,我不想创建另一个分支开发分支,只对其应用我的最新更改并推动它 将我过去两周的工作应用于同一分支上的更改。这是我

一些背景:

我从一个上游存储库分叉。 几周前,我从这家分店找到了一家分店 执行了一些更改,但签入尚未推送 同时,其他一些变化也被推动发展上游分支。 现状

优先级改变了,我在同一个开发分支上开发了另一个特性。我本应该创建一个不同的分支,但我继续添加当前更改顶部的新功能并签入。这意味着我的开发部门有我所有的2周的变化+这一个新功能

我想做什么

我想将上游/开发的准确副本复制到我的当前版本中,我不想创建另一个分支开发分支,只对其应用我的最新更改并推动它

将我过去两周的工作应用于同一分支上的更改。这是我几天后要推的

有人能帮我用git命令解释一下后台发生了什么吗

我试过的东西。 git重置-硬 这告诉我我的头是分离的

git rebase-i上游/分支机构。
我想这将应用我的所有更改,但我只希望最后一次更改。

我想象与您的情况对应的提交图如下所示:

        A--B--C--X [develop]
       /
o--o--o  <-- develop from couple of weeks ago
       \
        O--O [upstream/develop]
您需要找出commit C的散列并在命令中使用它,或者使用图形存储库浏览器在该提交上创建分支

分支机构只是临时的,将在最后再次被移除,但我们现在需要它,以便在下一步完成后保留两周的工作

结果:

                X [develop]
               /
        A--B--C [twoweeks]
       /
o--o--o--O--O [upstream/develop]
        A--B--C [twoweeks]
       /
o--o--o--O--O [upstream/develop]
             \
              X [develop]
o--o--o--O--O [upstream/develop]
             \
              X [develop]
               \
                A--B--C [twoweeks]
o--o--o--O--O--X [upstream/develop] [develop]
                \
                 A--B--C [twoweeks]
o--o--o--O--O--X [upstream/develop]
                \
                 A--B--C [develop]
2.将新功能移到 结果:

                X [develop]
               /
        A--B--C [twoweeks]
       /
o--o--o--O--O [upstream/develop]
        A--B--C [twoweeks]
       /
o--o--o--O--O [upstream/develop]
             \
              X [develop]
o--o--o--O--O [upstream/develop]
             \
              X [develop]
               \
                A--B--C [twoweeks]
o--o--o--O--O--X [upstream/develop] [develop]
                \
                 A--B--C [twoweeks]
o--o--o--O--O--X [upstream/develop]
                \
                 A--B--C [develop]
3.把两周的工作移过去 结果:

                X [develop]
               /
        A--B--C [twoweeks]
       /
o--o--o--O--O [upstream/develop]
        A--B--C [twoweeks]
       /
o--o--o--O--O [upstream/develop]
             \
              X [develop]
o--o--o--O--O [upstream/develop]
             \
              X [develop]
               \
                A--B--C [twoweeks]
o--o--o--O--O--X [upstream/develop] [develop]
                \
                 A--B--C [twoweeks]
o--o--o--O--O--X [upstream/develop]
                \
                 A--B--C [develop]
4.清理 推送新功能

$ git checkout develop
$ git push
结果:

                X [develop]
               /
        A--B--C [twoweeks]
       /
o--o--o--O--O [upstream/develop]
        A--B--C [twoweeks]
       /
o--o--o--O--O [upstream/develop]
             \
              X [develop]
o--o--o--O--O [upstream/develop]
             \
              X [develop]
               \
                A--B--C [twoweeks]
o--o--o--O--O--X [upstream/develop] [develop]
                \
                 A--B--C [twoweeks]
o--o--o--O--O--X [upstream/develop]
                \
                 A--B--C [develop]
快速发展本地分支机构并移除临时分支机构

$ git checkout develop
$ git merge --ff-only twoweeks
使用-ff仅作为理智检查,如果失败,则表明您做错了什么

$ git branch -d twoweeks
结果:

                X [develop]
               /
        A--B--C [twoweeks]
       /
o--o--o--O--O [upstream/develop]
        A--B--C [twoweeks]
       /
o--o--o--O--O [upstream/develop]
             \
              X [develop]
o--o--o--O--O [upstream/develop]
             \
              X [develop]
               \
                A--B--C [twoweeks]
o--o--o--O--O--X [upstream/develop] [develop]
                \
                 A--B--C [twoweeks]
o--o--o--O--O--X [upstream/develop]
                \
                 A--B--C [develop]
工具书类 正式文件: Git图书: 还有帮助:
我不是百分之百肯定我能听懂你的话,但听起来你在同一个分支上做了两件不同的事情。我会为每个特性建议一个新的分支,总共3个分支,然后将每个特性所需的更改挑选到正确的分支。然后分别推动这些分支。使用git通常有几种方法可以获得正确的结果,但它们都会对历史产生不同的影响。然而,我个人并不认为这样做有什么害处,除非其他人有更好或更合理的想法。谢谢你花时间和回复。是的,你说得对。我在同一个分支上做了两项不同的工作。当我执行git重置时-硬上游/开发。此命令是否会删除我所做的提交/更改?非常感谢您花时间回复。我并没有真正得到git rebase-进入上游/开发两周开发部分。我试过了,结果按你说的做了。这个命令就是这么做的吗?1.重置-硬上游/开发2。排除两周内的所有提交3。包括来自开发的所有承诺?我想我明白了。如果我错了,请纠正我。我认为下面的命令可以做到这一点。git再基地-进入上游/开发两周开发1。git重置-硬上游/开发2。选择两周和当前开发负责人之间的所有提交,并将其应用于上游/开发之上。虽然使用rebase只会在所有提交应用于新基础之后修改分支,但使用reset会在开始时移动分支,这将使在过程中出错时更难恢复。