Git 交互式 rebase 没有提交选择

Posted

技术标签:

【中文标题】Git 交互式 rebase 没有提交选择【英文标题】:Git interactive rebase no commits to pick 【发布时间】:2011-09-23 01:14:59 【问题描述】:

我在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 这样的助手?

【问题讨论】:

【参考方案1】:

rebase -i 没有提交范围将不会显示任何提交。要重新设置最后一个,比如 7 次提交,请使用以下内容:

git rebase -i HEAD~7

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


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

【讨论】:

【参考方案2】:

与非交互式变基一样,您必须根据特定的提交变基。

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

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

# 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~* 语法对我有用,但第一个没有。【参考方案3】:

当您使用git rebase -i 时,您通常必须指定要从哪个提交执行rebase。因此,例如,如果您想将最近 10 个提交中的一些提交删除到当前分支,您可以这样做:

git rebase -i HEAD~10

【讨论】:

【参考方案4】:

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

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

(假设你和要编辑的提交在同一个分支)--

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

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

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

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

【讨论】:

以上是关于Git 交互式 rebase 没有提交选择的主要内容,如果未能解决你的问题,请参考以下文章

git 交互式 rebase squash 进入下一个提交

自定义 Git *Rebase* 提交消息模板

git rebase 交互式:将提交合并到一起

magit rebase 使用 $EDITOR=vim

【Git】rebase 用法小结

Git:提交日期的批量更改