【问题标题】:Git interactive rebase no commits to pickGit 交互式 rebase 没有提交选择
【发布时间】: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 这样的助手?

【问题讨论】:

    标签: git rebase


    【解决方案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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-10-27
          • 2010-12-16
          • 1970-01-01
          • 2017-07-18
          • 1970-01-01
          • 2013-06-12
          • 2018-03-22
          相关资源
          最近更新 更多