我是大师,我做了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
?
答案 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
有一个包含您的更改的分支(基本上是配置分支)和 定期将其他分支合并到其中。这样改变就会 不要搬到其他分支机构