【问题标题】:Rebasing, some changes local and new remote commits变基,一些更改本地和新的远程提交
【发布时间】:2017-03-09 14:44:36
【问题描述】:

我将一些分支 X 重新定位为 develop,但我没有推送它(远程仓库不知道重新定位)。

接下来,我做了一些更改。同时,我的同事也推动了发展。
我现在也想(在我的本地变基和一些更改之后)推动发展。此外,我想扁平化这个变基并更改为一个提交(我知道squash,但在这种情况下我不能使用它)。

我该怎么办?我认为是这样的:

git add --update
git commit -m "rebase + my changes"   
git fetch develop
git rebase origin/develop
(solving potential conflicts)
?git commit? 
git push 

我说的对吗?

【问题讨论】:

标签: git git-merge rebase


【解决方案1】:

您给出的命令序列将很接近,但它不会为 rebase + 本地更改创建单个提交。首先,您不妨 fetch,下面的图表将假设您已将远程 refs 与远程 repo 保持同步。所以,如果有什么东西你还没有拿到,那就去拿吧。那么:

听起来你有

A --- B --- C <--(develop)(origin/develop)
       \
        X1 --- X2 --- X3 <--(branch_x)

接下来你从branch_x 重新定位到开发(...所以希望没有远程branch_x?),并且其他人推动了更改以开发:

A --- B --- C --- D <--(origin/develop)
             \
              X1' --- X2' --- X3' <--(develop)

您还对本地的develop 进行了一些更改。

(您建议的命令列表以addcommit 开头,所以我认为这些命令甚至还没有在本地上演...):

A --- B --- C --- D <--(origin/develop)
             \
              X1' --- X2' --- X3' <--(develop)
                                 \
                                  o <--WORKING TREE

所以您想将X1'X2'X3'o 组合成一个父级为D 的提交,对吧?

好吧,开始提交您的本地更改。

git add --update
git commit

(不知道你为什么使用--update,但只要你不打算添加新文件就可以了。)

A --- B --- C --- D <--(origin/develop)
             \
              X1' --- X2' --- X3' --- Y <--(develop)

现在你说你不能做squash,但我不清楚为什么会这样。在我看来,从这里最简单的事情就是

git checkout origin/develop
git merge --squash develop
# handle conflicts
git commit -m "rebase + my changes"
git branch -f develop

给你

A --- B --- C --- D <--(origin/develop)
                   \ 
                     X1X2X3Y <--(develop)

现在你可以推送了。

【讨论】:

    猜你喜欢
    • 2016-08-10
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    • 2013-08-31
    • 1970-01-01
    • 2013-02-24
    • 1970-01-01
    相关资源
    最近更新 更多