Git 交互式变基没有可供选择的提交

问题描述 投票:0回答:4

我在master上,我做到了

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
这样的帮手?

git rebase
4个回答
104
投票

就像非交互式变基一样,您必须变基到特定的提交。

使用非交互式变基,如果您提供当前提交的直接祖先,那么您就不会更改任何内容;使用交互式变基,您可以在要变基的提交之后编辑提交,即使该提交是当前提交的直接祖先,但您必须指定要从中编辑的此提交。

我不知道你的具体情况,但你可能想要这样的东西:

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

29
投票
没有提交范围的

rebase -i
将不会显示任何提交。要对最后(例如 7)次提交进行变基,请使用以下命令:

git rebase -i HEAD~7

但要小心,这会改写历史。如果提交已经推送,请不要这样做。


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


15
投票
git rebase -i

时,您通常必须指定要从哪个提交执行变基。因此,例如,如果您想删除当前分支的最后 10 个提交中的一些提交,您可以这样做:

git rebase -i HEAD~10



10
投票

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

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

要指定提交,您可以使用 HEAD~5 简写或使用 sha 校验和(您可以通过

git log

获得)


事实上,如果任何提交是您要在树中删除/编辑/重写的提交的先行/祖先,则该提交都可以。这将列出编辑器中自

<latest-commit-to-be-retained>

以来的所有提交(在 git 配置中定义)。从列表中,要删除提交,只需删除该特定行,保存并退出(vi 习惯:))文件+编辑器,然后执行

git rebase --continue

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

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

© www.soinside.com 2019 - 2024. All rights reserved.