Git交互式rebase没有承诺挑选
我在主人,我做了rebase -i <my_branch>
收到:
noop # Rebase c947bec..7e259d3 onto c947bec # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # x <cmd>, exec <cmd> = Run a shell command <cmd>, and stop if it fails # # If you remove a line here THAT COMMIT WILL BE LOST. # However, if you remove everything, the rebase will be aborted. #
我想挑选一些提交不是全部,因为其中一些不受欢迎。 当你想保留一些文件或者更改总是“本地”到某个分支时,你又如何工作? 有没有像.gitignore
这样的帮手?
就像一个非交互式的rebase,你必须重新绑定到一个特定的提交。
有了一个非交互式的rebase,如果你提供了一个当前提交的直接祖先,那么你不会改变任何东西; 使用交互式底图,您可以在提交之后编辑提交,即使提交是当前提交的直接祖先,但是您必须指定要从之后进行编辑的提交。
我不知道你的情况的细节,但你可能想要这样的事情:
# Opportunity to edit or prune commits between origin/master and current branch git rebase -i origin/master
要么
# Edit some of the last ten commits git rebase -i HEAD~10 # Note that ~10 uses a tilde("~") not a dash("-"_) !
没有提交范围的rebase -i
不会显示任何提交。 最后一个,比如7个提交使用以下内容:
git rebase -i HEAD~7
但要小心,这将重写历史。 不要这样做,如果提交已经被推送了
对于你的第二个问题:有一个分支与你的变化(基本上是一个configuration分支),并定期合并其他分支到它。 这样的变化不会移动到其他分支
当你使用git rebase -i
,你通常必须指定,因为你要执行rebase。 所以,例如,如果你想删除当前分支的最后10个提交中的一些提交,你可以这样做:
git rebase -i HEAD~10
正如其他人所提到的,你需要指定一个提交范围。
git rebase -i <latest-commit-to-be-retained>
(假设你和被编辑的提交在同一个分支上)
要指定提交,你可以使用HEAD〜5的shorthands或者使用sha校验和(你可以通过git log
来获得)
实际上,如果任何提交是先前/祖先到要在树中删除/编辑/重新提交的提交,就会执行。 这将列出自从编辑器中的<latest-commit-to-be-retained>
(在你的gitconfiguration中定义)之后的所有提交。 从列表中删除一个提交,只需删除该特定的行,保存并退出(vi habbits :))文件+编辑器,然后做git rebase --continue
对于第二个答案,我同意knittl
有一个分支与你的变化(基本上是一个configuration分支),并定期合并其他分支到它。 这样的变化不会移动到其他分支