Git:Rebase对提交的组合

时间:2016-03-12 18:03:44

标签: git

让我们假设我们有这样的提交历史:

A---B---C    (master)
     \
      D---E  (branch)

我们希望将提交B和C压缩为它们的组合B / C,然后我们想要在新的组合提交上重新绑定“分支”,即我们想要获得这样的东西:

A---(B/C)      (master)
       \
        D---E  (branch)

有可能获得吗? 你能建议我这样做吗?

2 个答案:

答案 0 :(得分:2)

您需要执行以下操作:

git checkout master
git rebase -i commit_A master

在哪里' commit_A'是提交A的哈希。

在交互式会话中,为提交C选择squash

它将创建以下结构:

* 63de888 (HEAD, master) B/C
| * cd56322 (branch) E
| * 9cb2dd6 D
| * 544fa17 B
|/  
* 2fc2859 A

然后,重新分支分支:

git checkout branch
git rebase master

结果应如下所示:

* a14e4d6 (HEAD, branch) E
* dc64709 D
* 63de888 (master) B/C
* 2fc2859 A

我使用以下脚本来验证步骤:

#! /bin/bash

set -eu

create-commit () {
    touch $1
    git add $1
    git commit -m $1
}

mkdir 0
cd 0
git init

create-commit A
create-commit B

git checkout -b branch
create-commit D
create-commit E

git checkout master
create-commit C

git log --oneline --graph --all --decorate | grep .

commit_A=$(git log --all | grep -B4 '^    A' | head -n1)
commit_A=${commit_A#* }
echo $commit_A

git rebase -i $commit_A master
git log --oneline --graph --all --decorate | grep .

git checkout branch
git rebase master

git log --oneline --graph --all --decorate | grep .
gitk --all

答案 1 :(得分:0)

  1. 记住旧B的哈希
  2. 破坏你的主分支
  3. git checkout branch
  4. git rebase --onto master <hash-from-step-1>
相关问题