现在的情况:
origin/mybranch --- A1 --- B1 --- A2 --- B2 --- A3 --- B3 mybranch
Run Code Online (Sandbox Code Playgroud)
我想清理那段历史(A1到B3),尤其是 因为我还没有把它推到任何地方,因为我想准备一个只有那些B*的补丁.
我想要的是:
origin/mybranch --- A1+A2+A3 --- B1+B2+B3 mybranch
Run Code Online (Sandbox Code Playgroud)
我可能根本不会推动这个(或者如果我愿意的话,只有总和的B*,我必须删除A*提交)并且当我在这方面进一步工作时,我可能会得到额外的这样的提交,即像这样:
origin/mybranch --- A1+A2+A3 --- B1+B2+B3 --- A4 --- B4 mybranch
Run Code Online (Sandbox Code Playgroud)
我想再次像上面那样改写它.
我不只是想知道任何方法来做到这一点(因为我能够以某种有点hacky的方式得到某种方式),我,尤其是.在这里要求正确/最好/最干净/最简单的方法来做到这一点.
我在做什么esp.是:我正在处理官方的xorg-xserver-1.7分支,并希望准备一个补丁(B*).因为我希望能够用系统替换我的自编译的xserver以进行简单的测试,所以我已经应用了一堆Debian/Ubuntu补丁(A*).但是,当我要在某处发布该补丁时,我想排除这些.
Nea*_*all 30
你想做一个互动的rebase.
尝试git命令时我想做的第一件事是制作我的分支的备份副本:
$ git branch my-backup-branch
Run Code Online (Sandbox Code Playgroud)
假设你的A1提交有哈希值152274b.试试这个:
$ git rebase -i 152274b^
Run Code Online (Sandbox Code Playgroud)
该命令会调出你的编辑器(通常是vim),如下所示:
pick 152274b A1
pick 14b0838 B1
pick 661b993 A2
pick a6510db B2
pick 557e171 A3
pick 85da0e4 B3
# Rebase 39a47e4..85da0e4 onto 39a47e4
#
# Commands:
# p, pick = use commit
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
Run Code Online (Sandbox Code Playgroud)
从这里你可以改变提交的顺序,完全删除它们甚至压缩它们.在这个例子中,你可能想要像这样移动和挤压:
pick 152274b A1
squash 661b993 A2
squash 557e171 A3
pick 14b0838 B1
squash a6510db B2
squash 85da0e4 B3
Run Code Online (Sandbox Code Playgroud)
试试看.如果您最终处于您不想要的状态,则可以始终返回到您在备份分支中保存的状态:
$ git reset --hard my-backup-branch
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5084 次 |
| 最近记录: |