我如何将我最近的承诺转移到一个新的分支机构,并在这些承诺完成之前重新定义主? 例如:

master A - B - C - D - E

为此:

newbranch     C - D - E
             /
master A - B 

当前回答

只有在这种情况下:

Branch one: A B C D E F     J   L M  
                       \ (Merge)
Branch two:             G I   K     N

我表演了:

git branch newbranch 
git reset --hard HEAD~8 
git checkout newbranch

我希望承诺我会成为头,但承诺是现在的。

要确保在历史上登上正确的位置,就更容易与承诺的哈希工作。

git branch newbranch 
git reset --hard #########
git checkout newbranch

其他回答

如果你是像我这样的人,你正在使用Visual Studio,那么你可以这样做:在我的情况下,我想把最新的承诺交给另一个分支。

右键单击前一个(委托)。

此分類上一篇

因此,所有承诺变更将出现在 Git 变更板上。

此分類上一篇

到您的目标分支或从右下角创建一个新的分支。

此分類上一篇

在“Git Changes”中,双击您的最新 Stash. “Stash details” 面板将被打开. 点击“Pop”,然后解决冲突(如果存在)。

此分類上一篇

最后,做你的改变。

對於那些想知道為什麼它工作(正如我開始的那樣):

你想回到C,然后移动D和E到新分支。

A-B-C-D-E (HEAD)
        ↑
      master

在Git分支新Branch之后:

    newBranch
        ↓
A-B-C-D-E (HEAD)
        ↑
      master

此分類上一篇: git reset --hard HEAD~2:

    newBranch
        ↓
A-B-C-D-E (HEAD)
    ↑
  master

因为一个分支只是一个指标,大师指向最后一个承诺。当你做了新的Branch,你只是做一个新的指标到最后一个承诺. 然后使用Git重新设置你移动了大师指标回两个承诺. 但因为你没有移动新的Branch,它仍然指向承诺它最初做了。

这里的大多数解决方案计算了你想回去的承诺数量,我认为这是一个错误的方法,计算需要计算。

你可以简单地通过你想要的承诺的承诺,或者换句话说,你想要的承诺是最后的承诺:

(重定向自Commit Hash)

为了避免这一点:

1) git checkout master

2) git branch <feature branch> master

3) git reset --hard <commit hash>

4) git push -f origin master

最简单的方式就是这样做:

任命主分支到您的新分支(假设您在主分支):

git branch -m newbranch

2、从你想要的承诺中创建主分支:

git checkout -b master <seven_char_commit_id>

例如 git checkout -b master a34bc22

注意:新行业的上流将是起源/主流。

要做到这一点,而不重写历史(即如果您已经推出了承诺):

git checkout master
git revert <commitID(s)>
git checkout -b new-branch
git cherry-pick <commitID(s)>

那么,两支分支都可以在没有武力的情况下被推动!