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分支),并定期合并其他分支到它。 这样的变化不会移动到其他分支