我有两个git分支,"A"和"B",并提交编号为1到8.我的历史看起来像这样
1 -> 2 -> 3 -> 4[A] -> 5 -> 6 -> 7 -> 8[B]
Run Code Online (Sandbox Code Playgroud)
我想改变它,所以我的历史看起来像这样:
1 -> 2 -> 3 -> 4 -> 5 -> 6[A] -> 7 -> 8[B]
Run Code Online (Sandbox Code Playgroud)
也就是说,我想将分支A的头部从提交4移动到提交6.
我用什么命令来做这个?
Mat*_*hen 44
你可以运行:
git branch -f A 6
Run Code Online (Sandbox Code Playgroud)
ral*_*nja 13
git checkout A
git reset --hard 6
Run Code Online (Sandbox Code Playgroud)
这是rebase的一个特例,只是分支是空的:
git checkout A
git rebase B
Run Code Online (Sandbox Code Playgroud)
rebase更一般; 它也处理这种情况:
之前:
A1 -> A2 -> [A]
/
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8[B]
Run Code Online (Sandbox Code Playgroud)
后:
A1' -> A2' -> [A]
/
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8[B]
Run Code Online (Sandbox Code Playgroud)
合并A1'和A2'以解决父分支上4到8之间的增量.
Git rebase处理这个简单的案例没有麻烦.我创建了一个包含两个提交的repo master和一个br指向第一个提交的分支.
$ git checkout br
Switched to branch 'br'
$ git rebase master
First, rewinding head to replay your work on top of it...
Fast-forwarded br to master.
Run Code Online (Sandbox Code Playgroud)
噗,完了.日志现在显示指向第二个提交的分支.
我们也可以实现这个"After":[感谢M. Flaschen指出这个缺失]:
A1'' -> A2'' -> [A]
/
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8[B]
Run Code Online (Sandbox Code Playgroud)
我们将命名特定的提交6,而不是重新定位到分支B,例如
git checkout A
git rebase 6 # rather than rebase B
Run Code Online (Sandbox Code Playgroud)
当没有A1和A2提交时,这会减少到原始问题:将[A]指针从4移动到6.
| 归档时间: |
|
| 查看次数: |
33268 次 |
| 最近记录: |