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
获得)
事实上,如果它是您想要在树中删除/编辑/改写的提交的先于/祖先,则任何提交都可以。这将列出自编辑器中的<latest-commit-to-be-retained>
以来的所有提交(在您的 git 配置中定义)。从列表中删除提交,只需删除该特定行,保存并退出(vi habbits :))文件+编辑器,然后执行git rebase --continue
对于第二个答案,我同意 knittl
有一个包含您的更改的分支(基本上是一个配置分支)和 定期将其他分支合并到其中。这样,更改将 不移动到其他分店
【讨论】:
以上是关于Git 交互式 rebase 没有提交选择的主要内容,如果未能解决你的问题,请参考以下文章