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

时间:2018-05-20 18:55:05

标签: git git-rebase

一些背景知识:

  1. 我从上游存储库分叉。
  2. 几周前从这个分支开出分支
  3. 执行了一些更改并签入(尚未推送)
  4. 同时推动其他一些变化,以发展上游分支。
  5. 现状。

    优先级发生了变化,我在同一个开发分支上研究了另一个功能。我应该创建一个不同的分支,但我继续添加我当前更改的新功能并签入。这意味着我的开发分支已经进行了所有2周的更改+这一个新功能。

    我想做什么?

    1. 我想获取上游/开发的确切副本到我的当前(我不想创建另一个分支)开发分支并仅应用我的最新更改并推送它

    2. 在同一分支上应用我之前的两周工作。我几天后会推。

    3. 有人可以帮助我使用git命令并解释在后台发生的事情吗?

      我尝试过的事情。 git reset --hard 这告诉我,我的头已脱离。

      git rebase -i upstream / branch。 我认为这将适用于我的所有更改,但我只想要最后一次更改。

1 个答案:

答案 0 :(得分:1)

我认为对应于您的情况的提交图如下所示:

        A--B--C--X [develop]
       /
o--o--o  <-- develop from couple of weeks ago
       \
        O--O [upstream/develop]

A--B--C是您的两周工作,X是您最新的新功能。

现在您执行以下操作:

1。标记为期两周的工作

$ git branch twoweeks C

您需要找出commit C的哈希并在命令中使用它,或者使用图形存储库浏览器在该提交上创建分支。

分支只是临时的,最后会被删除,但我们现在需要它在下一步完成后保留两周的工作。

结果:

                X [develop]
               /
        A--B--C [twoweeks]
       /
o--o--o--O--O [upstream/develop]

2。将新功能移到

$ git rebase --onto upstream/develop twoweeks develop

结果:

        A--B--C [twoweeks]
       /
o--o--o--O--O [upstream/develop]
             \
              X [develop]

3。移动两周工作

$ git rebase develop twoweeks

结果:

o--o--o--O--O [upstream/develop]
             \
              X [develop]
               \
                A--B--C [twoweeks]

4。清理

  1. 推送新功能

    $ git checkout develop
    $ git push
    

    结果:

    o--o--o--O--O--X [upstream/develop] [develop]
                    \
                     A--B--C [twoweeks]
    
  2. 快进本地开发分支并删除临时分支

    $ git checkout develop
    $ git merge --ff-only twoweeks
    

    (使用--ff-only作为健全性检查,如果失败则表示您做错了什么)

    $ git branch -d twoweeks
    

    结果:

    o--o--o--O--O--X [upstream/develop]
                    \
                     A--B--C [develop]
    
  3. 参考