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编写一个别名或脚本来为您完成这项工作
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编写一个别名或脚本来为您完成这项工作
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提交
通过这种方式,您可以在工作时获得功能分支的所有好处,并且可以