Git Interactive Rebase没有提交可以选择


105

我在师父上,我做到了 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吗?

Answers:


85

像非交互式重新设置一样,您必须重新基于特定的提交。

对于非交互式基础,如果您提供当前提交的直接祖先,那么您将无需进行任何更改。使用交互式变基,即使提交是当前提交的直接祖先,您也可以在基于其的提交之后编辑提交,但是您必须指定要从其开始进行编辑的提交。

我不知道您的情况的详细信息,但是您可能想要这样的事情:

# 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("-"_) !

使用HEAD~*语法对我有用,但第一个没有。
Dev Yego

25

rebase -i没有提交范围的将不会显示任何提交。要重设最后的7次提交,请使用以下命令:

git rebase -i HEAD~7

但是请注意,这将重写历史记录。如果提交已经被推送,请不要这样做


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


9

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

git rebase -i HEAD~10

6

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

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

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

要指定提交,您可以使用HEAD〜5速记或使用sha校验和(可以通过获取git log

实际上,如果任何提交都比您要在树中删除/编辑/改写的提交的先后/祖先执行,那么它将起作用。这将列出自<latest-commit-to-be-retained>编辑器(在git config中定义)以来的所有提交。从列表中删除一个提交,只需删除该行,保存并退出(vi habbits :))file + editor,然后执行git rebase --continue

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

有一个包含您所做更改的分支(基本上是配置分支),并定期将其他分支合并到其中。这样更改不会移到其他分支

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.