Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git-简单的一次提交挤压的简单方法?_Git_Commit_Rebase_Squash - Fatal编程技术网

git-简单的一次提交挤压的简单方法?

git-简单的一次提交挤压的简单方法?,git,commit,rebase,squash,Git,Commit,Rebase,Squash,我正在从事的项目要求所有特性贡献都是单次提交,但我仍然喜欢在提交过程中提交我的进度,所以我通常在提交时压缩提交 假设我在分支上进行了第一次新的提交: git commit -am "Added new feature" 从那时起,直到我提交更改,我将执行以下操作: git commit -am "asdfasdasd" git rebase -i HEAD~2 …然后在交互式重基中挤压我的提交 我一天做10-20次这样的事情,而且似乎我想要得到的简单效果的按键次数太多了。是否有更好/更快/更

我正在从事的项目要求所有特性贡献都是单次提交,但我仍然喜欢在提交过程中提交我的进度,所以我通常在提交时压缩提交

假设我在分支上进行了第一次新的提交:

git commit -am "Added new feature"
从那时起,直到我提交更改,我将执行以下操作:

git commit -am "asdfasdasd"
git rebase -i HEAD~2
…然后在交互式重基中挤压我的提交

我一天做10-20次这样的事情,而且似乎我想要得到的简单效果的按键次数太多了。是否有更好/更快/更容易的方法获得相同的结果?如果没有一个单一的魔法命令可以做到这一点,那么我想我要寻找的是最有效的方法。从历史记录中弹出最近的提交(不放弃它包含的更改!),然后再次提交,这将包括弹出提交中的更改以及工作更改

是否有更好/更快/更容易的方法获得相同的结果

我不确定是否有更快/更好/更简单的方法来做壁球,但我非常确定解决这个问题的另一个好办法是:

  • V1使用来自的
    --squash
    标志
  • V2软重置和提交
  • V3编写一个别名或脚本来为您完成这项工作
V1。 首先,您必须重置最后的X提交(
git reset--hard HEAD~3
),然后应用
git merge--squash HEAD{1}
,因为
HEAD}{1}
是分支在上一个命令之前的位置

V2 您可以查看V2,可能会发现它更简洁:
git reset--softhead~3&&git commit
,但我个人不喜欢它

V3 当然,也有这样一种情况,您可以编写别名,从而使整个过程自动化。您可能会发现这很有用:

  • 最好的!:
  • 是否有更好/更快/更容易的方法获得相同的结果

    我不确定是否有更快/更好/更简单的方法来做壁球,但我非常确定解决这个问题的另一个好办法是:

    • V1使用来自的
      --squash
      标志
    • V2软重置和提交
    • V3编写一个别名或脚本来为您完成这项工作
    V1。 首先,您必须重置最后的X提交(
    git reset--hard HEAD~3
    ),然后应用
    git merge--squash HEAD{1}
    ,因为
    HEAD}{1}
    是分支在上一个命令之前的位置

    V2 您可以查看V2,可能会发现它更简洁:
    git reset--softhead~3&&git commit
    ,但我个人不喜欢它

    V3 当然,也有这样一种情况,您可以编写别名,从而使整个过程自动化。您可能会发现这很有用:

  • 最好的!:
  • 使用
    git commit--amend-am“message goes here”
    (或
    --amend-a
    -通常前一条commit消息是一个很好的起点,甚至只是手动添加后的
    --amend
    )。
    --amend
    接受此git提交历史记录:

    ...-o-X-Y   <-- branch
    
            Y   [no label, but still in reflog as branch@{1}]
           /
    ...-o-X-Z   <-- branch
    
    当您进行提交并重新设置基础时,首先:

    ...-o-X-Y-Z   <-- branch
    
    ..-o-X-Y-Z使用
    git commit--amend-am“message goes here”
    (或
    --amend-a
    -通常前一条commit消息是一个很好的起点,甚至只是手动添加后的
    --amend
    )。
    --amend
    接受此git提交历史记录:

    ...-o-X-Y   <-- branch
    
            Y   [no label, but still in reflog as branch@{1}]
           /
    ...-o-X-Z   <-- branch
    
    当您进行提交并重新设置基础时,首先:

    ...-o-X-Y-Z   <-- branch
    

    …-o-X-Y-Z将功能工作压缩到单个提交中的价值值得怀疑。一些不必要的搅动是有用的。您会丢失关于为什么要进行每个更改的重要信息,并最终导致一个可能难以查看的大blob。版本控制的部分意义在于,五年后,有人可以回答“为什么这条线在这里”的问题,而挤压会丢失这些信息。如果人们不喜欢查看大量更改,他们可以使用
    git diff feature master
    获得挤压效果,而不会丢失将来的信息。但你可能无法控制

    为了缓解这个问题,采取简单的权宜之计,在分支中处理您的特性。这是你们应该经常做的事情,以避免弄乱主人,把部分完成的工作推给其他人。正常工作,正常提交。特征完成后,只有在合并时才进行挤压

    • git签出-b功能/任何功能
    • …正常工作和承诺
    • git签出主机
    • git合并--挤压功能/任何功能
    • git提交

    通过这种方式,您可以在工作时获得功能分支的所有好处,并且仍然可以遵循挤压策略。

    将功能工作挤压到单个提交中的价值值得怀疑。一些不必要的搅动是有用的。您会丢失关于为什么要进行每个更改的重要信息,并最终导致一个可能难以查看的大blob。版本控制的部分意义在于,五年后,有人可以回答“为什么这条线在这里”的问题,而挤压会丢失这些信息。如果人们不喜欢查看大量更改,他们可以使用
    git diff feature master
    获得挤压效果,而不会丢失将来的信息。但你可能无法控制

    为了缓解这个问题,采取简单的权宜之计,在分支中处理您的特性。这是你们应该经常做的事情,以避免弄乱主人,把部分完成的工作推给其他人。正常工作,正常提交。特征完成后,只有在合并时才进行挤压

    • git签出-b功能/任何功能
    • …正常工作和承诺
    • git签出主机
    • git合并--挤压功能/任何功能
    • git提交
    通过这种方式,您可以在工作时获得功能分支的所有好处,并且可以