正确的git与git-autofixup提交

2021-03-18 19:08:34

版本控制系统GIT为我们提供了协作软件开发的强大工具。开发人员使用代码审查以在客户注意到他们之前捕获许多问题。为了解决审核期间发现的问题,开发人员通常必须进行许多小的变化。这可能是一个繁琐的过程,涉及大量忙碌。

要解决审核评论,您通常希望修改早期的提交,这些提交不太正确。本文是如何通过使用git-autofixup自动创建修复程序来执行此操作的教程。结果,您可以专注于更有趣的问题。

让我们说你想和朋友分享音乐日记。每天,您和您的朋友都会将您最喜欢的歌曲添加到此文件中。不要意外地覆盖彼此的添加,您将日记存储在Git存储库中。

要开始,请创建一个新的Git存储库并添加一个空的音乐日记,为一周中的每一天都有标题。

$ git init我最喜欢的东西&& CD我最喜欢的东西 - 在〜/ my-chinestion-missions / .git / $ echo&gt中initeializimitializinializializializializialialized空的git存储库; songs.md" \#我们的音乐日记##星期一##星期二##星期三##星期四##周五" $ git添加歌曲.md $ git commit -m"初始提交"

由于您不想每次添加歌曲的每次添加更改,因此您使用基于分支的工作流程:您的更改在本地分支上运行,直到您将其合并到共享远程分支。让我们为本周添加的歌曲创建一个新的分支:

很棒,现在你有自己的分支,你可以在那里添加歌曲。在本周末,您可以分享您的添加。

让我们在星期一添加一首歌,并提交更改。在这里,我们使用sed文本编辑器首先搜索我们的星期一行,然后使用sed的“a”命令将新项目添加到列表中。

SED -I" /星期二/ a-ISN'它可爱" songs.mdgit commit -am"星期二" sed -i" /星期三/ a-迷信" songs.mdgit commit -am"星期三" sed -i" / thursday / a-爵士和#34; songs.mdgit commit -am"星期四" sed -i" / friday / a-导致我们结束" songs.mdgit commit -am"星期五"

$ cat songs.md#我们的音乐日记##星期一 - overjoyed ##星期二 - ISN' T Heavicy ##星期三 - 迷信##星期四 - 爵士##星期五 - 因为我们' ve&#39

看起来很棒!但等等,拼错拼音只是潜入?如果你是史蒂夫奇怪的粉丝,你会注意到两首歌标题是拼写错误的!让我们再次编辑日记,纠正这些错误。您可以使用SED的“S”命令替换每次出现字符串。

我们可以使用这些更正创建一个新的提交,但这将推翻每天有一个提交的漂亮结构。另外,您还希望与朋友分享您的音乐,但不是您的愚蠢错误,对吧?

幸运的是,您已经阅读了Git Rebase的教程,因此您知道如何更改Commit历史记录:您只需要创建一个所谓的修复程序,该提交修复拼写错误,然后使用Git Rebase -i --Autosquash来修改提交介绍了错字。

要创建一个修复程序,我们需要知道目标提交要修改。你已经做了两个属于不同目标的修复 - 但是哪些修复?一个简单的启发式是使用一个提交来添加修复更正的行。让我们询问Git Chinouch哪个提交了错误的行。自从ISN'它可爱是在第7号线,你可以通过包容范围,只能归咎于git责备。

$ git chinough -l 7,7头歌曲.md91492e3c(约翰内斯2020-10-16 09:44:06 +0200 7) - ISN'可爱

Gotcha!需要纠正ID 91492E3C的提交。让我们这样做。请记住,您只想在此提交中更改一行,因此您可以使用--patch选项选择正确的选项。

$ git commit --patch --fixup 91492e3cdiff --git a / songs.md b / songs.mdindex 8795f4b..6229282 100644 --- a / songs.md +++ b / songs.md @@ -7 + 4,7 @@ @ - 过度约##星期二 - ISN' T He Lovely + - ISN' T她可爱##星期三 - 迷信(1/2)阶段这个Hunk [Y,N]?是的,请! @@ -13,5 +13,5 @@ - sir duke ##星期五 - 因为我们结束了封面+ - 导致我们以恋人(2/2)阶段为止这个HUNK [Y.)&#39结束了,n]?不,谢谢,为以后留下这个;)[我的歌曲为期84460d1]修复!周二1文件已更改,1个插入(+),1删除( - )

好的,这很容易!现在你只需要再次做同样的事情来换下另一个错误。等一下......🤨“再次相同”,嗯?好吧,如果它这么容易,为什么电脑不能为我做这件事? 🤔

转出jordan torbiak的git-autofixup确实是我们想要的:它在每个更改中运行git责备,并创建夹具提交,就像我们所做的那样。

让我们试试吧。首先撤消您刚刚创建的Fixpup提交,但留下日记 - 是:

然后只是运行git-autofixup。传递特殊提交参考文献@ {上游}告诉它以考虑当前分支上的所有提交,如期望的拾取目标。

$ git autofixup @ {上游} [我的歌曲为期88d2457]修复!星期二1文件已更改,1个插入(+),1删除( - )[我的歌曲Aadb1e5]修复!星期五1文件已更改,1插入(+),1删除( - )

观察Git-AutoFixup为周二和星期五制作的错误创建了两个修复程序。

最后,运行git rebase -i --autosquash,你有一个完美无暇的历史,准备分享。我们必须弄清楚git责备和git提交的正确论据,而git-autofixup是足够聪明,以便开箱即用。

侧面注意:git修改了很好的补充git-autofixup。它是Git Rebase的一个有效的替代方案,它通过在不触摸WhiteTree文件的情况下重写提交来避免无效构建。

在Symflower中,我们重视彻底的审查过程,Git-Autofixup为我们节省了大量的时间来实现这一点。我们希望您发现它也很有用。请记住,使用启发式分配固定目标;如有疑问,请仔细检查您的修复程序是否正确。 😉如果您想了解Git-Autofixup如何工作的技术细节,原始博客文章是一个很好的开始。

如果你喜欢努力解决挑战性问题,使用制作开发乐趣的工具,甚至希望帮助我们增强我们的工作流程,考虑加入我们!