如何使用git提交精细更改并保持日志简单

时间:2014-01-09 08:19:36

标签: git

当我开发新功能时,我可能会多次调整代码以获得更好的性能。在100个测试时间中,我可能会在时间1,时间13,时间43,...

获得更好的表现

我是否应该在获得更好的性能时提交代码?

如果是这样的话,如果有一些小的变化(例如拼写错误,或者只是让代码变得更漂亮),我会在历史记录中获得许多小的提交日志。但是大多数时候我不能马上做到这一点,通常需要我很多次。

记录上述小变化的更好方法是什么?

2 个答案:

答案 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,然后您可以选择squashfixup选项将它们合并在一起:

 #  s, squash = use commit, but meld into previous commit
 #  f, fixup = like "squash", but discard this commit's log message

通过这种方式,您可以push只对中央仓库进行一次提交。