什么';这两者之间的区别是什么;壁球“;及;“修正”;在Git/Git扩展中?

什么';这两者之间的区别是什么;壁球“;及;“修正”;在Git/Git扩展中?,git,git-extensions,squash,fixup,difference,Git,Git Extensions,Squash,Fixup,Difference,我使用Git扩展已经有一段时间了(太棒了!),但我还没有找到以下问题的简单答案: 有时,在键入提交消息时,用户会输入错误。我的朋友向我展示了如何通过以下方式修复它(在Git扩展中): 右键单击提交>高级>修复提交 然后我只需勾选“修改”框,然后重写我的消息,瞧!我的提交消息已修复 然而,另一个选项“挤压提交”。。。我一直想知道它是干什么的 我的问题是: 有人能简单地解释一下在Git/Git扩展中压缩提交和修复提交之间的确切区别吗?他们看起来有点。。。与我“相似”: 我不知道Git扩展对它有什么

我使用Git扩展已经有一段时间了(太棒了!),但我还没有找到以下问题的简单答案:

有时,在键入提交消息时,用户会输入错误。我的朋友向我展示了如何通过以下方式修复它(在Git扩展中):

右键单击提交>高级>修复提交

然后我只需勾选“修改”框,然后重写我的消息,瞧!我的提交消息已修复

然而,另一个选项“挤压提交”。。。我一直想知道它是干什么的

我的问题是:

有人能简单地解释一下在Git/Git扩展中压缩提交修复提交之间的确切区别吗?他们看起来有点。。。与我“相似”:

我不知道Git扩展对它有什么特别的作用,但是,
Git rebase
有一个选项,可以使用squash自动压缩或修复提交!或者修理!前缀,分别为:

   --autosquash, --no-autosquash
       When the commit log message begins with "squash! ..." (or "fixup!
       ..."), and there is a commit whose title begins with the same ...,
       automatically modify the todo list of rebase -i so that the commit
       marked for squashing comes right after the commit to be modified,
       and change the action of the moved commit from pick to squash (or
       fixup).

squash和fixup之间的区别在于,在重新基址期间,
squash
操作将提示您合并原始消息和squash提交的消息,而
fixup
操作将保留原始消息并放弃来自fixup提交的消息。

简单地说,对一系列提交进行重定基址时,每个提交标记为
挤压
,使您有机会将其消息用作
拾取
重写
提交消息的一部分

使用
fixup
时,来自该提交的消息将被丢弃。

来自:

如果要将两个或多个提交折叠为一个,请将第二个和后续提交的命令“pick”替换为“squash”或“fixup”。如果提交有不同的作者,则折叠的提交将归于第一次提交的作者。折叠提交的建议提交消息是第一次提交的提交消息和使用“squash”命令的提交消息的串联,但使用“fixup”命令忽略提交的提交消息


我修补了git扩展,无法将多个提交压缩成一个。要做到这一点,我必须求助于命令行,并发现有帮助

这是交互式重基,请注意以下几点:

  • ~2这里指的是您希望在此操作中涉及的提交数量,包括当前头
  • 您必须编辑下一个交互式编辑窗口,将第一项保留为“pick”,并将后续行替换为“squash”。如果这是不透明的,上面链接中的说明会更清楚
    • 为什么不问问git本身呢? 当您使用
      git bash
      重新设置基址时,它会显示:

      选择512b1d7(一些注释)
      #将621b2e4..512b1d7重新设置到621b2e4上(1命令)
      #
      #命令:
      #p,pick=使用提交
      #r,reword=使用提交,但编辑提交消息
      #e,edit=使用提交,但停止修改
      #s,squash=使用提交,但合并到以前的提交中
      #f,fixup=类似于“squash”,但丢弃此提交的日志消息
      #x,exec=使用shell运行命令(行的其余部分)
      #d,drop=remove-commit
      #l,label=用名称标记当前磁头
      #t,重置=将磁头重置为标签
      #m,合并[-C |-C][#]
      # .       使用原始合并提交的
      # .       消息(如果没有原始合并提交,则为单行)
      #。已指定)。使用-c重写提交消息。
      #
      #这些线路可以重新订购;它们是从上到下执行的。
      #
      #如果在此处删除一行,则提交将丢失。
      D:/code/fenixito legacy-api/.git/rebase-merge/git-rebase-todo[unix](11:57 23/10/2019)1,1开始
      “D:/code/xxx/.git/rebase merge/git rebase todo”[UNIX]27L,1170C
      
      你看:

      s、 挤压=使用提交,但合并到上一次提交

      f、 fixup=类似于“挤压”,但丢弃此提交的日志消息

      如果问题是这样做时git中的
      squash
      fixup
      之间有什么区别,那么答案就是提交消息

      s,squash
      =使用提交,但合并到以前的提交中

      f,fixup
      =类似于“挤压”,但放弃此提交的日志消息


      例如:

      选择22a4667父亲提交消息
      挤压46d7c0d子提交消息#案例1
      #修复46d7c0d子提交消息#案例2
      
      在案例1中,重定基址后的提交消息为:

      father commit message
      
      child commit message
      
      而案例2中的提交消息是:

      father commit message
      # no sub messages
      

      你可以在上阅读更多关于
      rebase
      和squash/fixup的信息。这是一个很好的答案。我一直想知道为什么我会收到组合提交消息。你链接到的帖子是关于挤压和修复的最清晰的解释。谢谢谢谢你的答案绝对值得更多人喜欢!!为
      fixup
      then保留哪条消息?@IgorGanapolsky从git树中的下一次提交中获取消息。您基本上是将您的提交“合并”到其中。
      father commit message
      # no sub messages