当我开发新功能时,我可能会多次调整代码以获得更好的性能。在100个测试时间中,我可能会在时间1,时间13,时间43,...
获得更好的表现我是否应该在获得更好的性能时提交代码?
如果是这样的话,如果有一些小的变化(例如拼写错误,或者只是让代码变得更漂亮),我会在历史记录中获得许多小的提交日志。但是大多数时候我不能马上做到这一点,通常需要我很多次。
记录上述小变化的更好方法是什么?
答案 0 :(得分:3)
如果您要减少提交量并同时保留详细历史记录,我建议使用feature branch + squash方法。这是一个例子:
假设您在master
分支上,没有本地更改。
首先创建一个功能分支
$ git checkout -b tuning
然后执行调整,提交每个相关步骤
... small change ...
$ git commit -am "Time 1"
... small change ...
$ git commit -am "Time 2"
... small change ...
$ git commit -am "Time 3"
...
现在历史看起来像这样
* (tuning) Time 3
|
* Time 2
|
* Time 1
|
* (master)
接下来创建一个临时分支,并将所有更改压缩到master
分支上的单个提交。这是通过重置原始主分支保留本地内容和git索引(--soft
),然后检出master
分支然后提交到它来完成的。
git checkout -b tmp
git reset --soft master
git checkout master
git commit -m "Tuned (see tuning branch for more details)"
git branch -D tmp
现在,您可以在master
分支上获得一次提交,并在tuning
分支上获得此提交的完整历史记录。
* (master) Tuned (see tuning branch for more details)
|
| * (tuning) Time 3
| |
| * Time 2
| |
| * Time 1
| /
*
|
答案 1 :(得分:0)
我更喜欢与大量小功能相关的提交,这样您就可以轻松恢复提交以返回到先前的状态。
当您与其他开发人员合作时,您需要在中央存储库pushing
时考虑公司政策。
在处理本地副本时,git
为您提供了使用rebase
合并您的提交的工具:
git rebase -i HEAD~5
将在最近5次提交中打开交互式rebase,然后您可以选择squash
或fixup
选项将它们合并在一起:
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
通过这种方式,您可以push
只对中央仓库进行一次提交。