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

66941 次浏览

没有提交范围的 rebase -i将不会显示任何提交:

git rebase -i HEAD~7

但是要小心,这将重写历史。不要这样做,如果提交已经推


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

与非交互式 rebase 一样,您必须将 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("-"_) !

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

git rebase -i HEAD~10

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

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

(假设您与要编辑的提交在同一个分支上)——

要指定提交,您可以使用 HEAD ~ 5快捷方式或者使用 sha 校验和(可以通过 git log获得)

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

对于第二个答案,我同意毛织

有一个带有更改的分支(基本上是一个配置分支) ,并且 定期合并其他分支到它。这样的变化将 不要移动到其他分支