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

master A - B - C - D - E

为此:

newbranch     C - D - E
             /
master A - B 

当前回答

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

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

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

其他回答

git reset HEAD~3
git stash
git checkout newbranch
git stash pop

如果你的主要目标是旋转回主 你想保持文件变更 你不关心错误的命令上的消息 你没有推,但 你想这很容易记住 你不想要如临时/新分支, 查找和复制命令, 和其他头痛等并发症

这是什么不做

目标

OP表示,目标是“在这些承诺完成之前重新掌握”而不失去变化,而这个解决方案就是这样。

不要这样做,如果你推了大师的变化

如果你只是重新编写你的本地大师没有影响,当它被推向上流,但推一个重新编写的历史给合作伙伴可能会导致头痛。

1) 创建一个新的分支,将所有更改转移到 new_branch。

git checkout -b new_branch

(二)然后回到旧的分支。

git checkout master

3、做吉·雷巴斯

git rebase -i <short-hash-of-B-commit>

4) 然后打开的编辑器包含最后3个承诺信息。

...
pick <C's hash> C
pick <D's hash> D
pick <E's hash> E
...

5) 更改选项下载所有这些 3 任务. 然后保存并关闭编辑器。

...
drop <C's hash> C
drop <D's hash> D
drop <E's hash> E
...

6) 现在最后3个命令从当前分支(主)中移除。 现在强烈推分支,在分支名称之前 + 标志。

git push origin +master

这不是在技术上“移动”它们,但它有相同的效果:

A--B--C  (branch-foo)
 \    ^-- I wanted them here!
  \
   D--E--F--G  (branch-bar)
      ^--^--^-- Opps wrong branch!

While on branch-bar:
$ git reset --hard D # remember the SHAs for E, F, G (or E and G for a range)

A--B--C  (branch-foo)
 \
  \
   D-(E--F--G) detached
   ^-- (branch-bar)

Switch to branch-foo
$ git cherry-pick E..G

A--B--C--E'--F'--G' (branch-foo)
 \   E--F--G detached (This can be ignored)
  \ /
   D--H--I (branch-bar)

Now you won't need to worry about the detached branch because it is basically
like they are in the trash can waiting for the day it gets garbage collected.
Eventually some time in the far future it will look like:

A--B--C--E'--F'--G'--L--M--N--... (branch-foo)
 \
  \
   D--H--I--J--K--.... (branch-bar)

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

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

(重定向自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

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