Git互动rebase没有提交选择

时间:2011-06-26 17:26:27

标签: 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

4 个答案:

答案 0 :(得分:69)

与非交互式rebase一样,您必须重新绑定到特定的提交。

使用非交互式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("-"_) !

答案 1 :(得分:23)

没有提交范围的

rebase -i将不会显示任何提交。改为最后一个,比方说,7个提交使用以下内容:

git rebase -i HEAD~7
但是要小心,这会改写历史。如果提交已经推送

,请不要这样做

第二个问题:拥有一个包含更改的分支(基本上是一个配置分支),并定期将其他分支合并到中。这样,更改不会转移到其他分支

答案 2 :(得分:8)

当您使用git rebase -i时,通常需要指定,因为您要执行rebase的提交。因此,例如,如果要删除当前分支的最后10个中的某些提交,则可以执行以下操作:

git rebase -i HEAD~10

答案 3 :(得分:4)

正如其他人所提到的,您需要指定一个提交范围。

git rebase -i <latest-commit-to-be-retained>

(假设您与要编辑的提交位于同一分支上) -

要指定提交,您可以使用HEAD~5个shorthands或使用sha校验和(可以通过git log获得)

实际上,如果它是要在树中删除/编辑/重写的提交的先行/祖先,则任何提交都会执行。这将列出自编辑器中<latest-commit-to-be-retained>以来的所有提交(在您的git配置中定义)。从列表中删除提交,只需删除该特定行,保存并退出(vi habbits :))文件+编辑器,然后执行git rebase --continue

对于第二个答案,我同意knittl

  

有一个包含您的更改的分支(基本上是配置分支)和   定期将其他分支合并到其中。这样改变就会   不要搬到其他分支机构