如何整理您在Git中提交的历史记录

我们正在发布在hackernoon.com上找到文章的翻译它的作者Thiago Miranda撰写了有关如何使Git的使用更加方便和高效的文章。



关于Git中一些非常有用的命令


在上个月,我一直在进行结对编程,并在Git中创建了数百个提交。在本文中,我将分享这段时间内学到的最重要的东西:我将讨论如何处理提交的历史,成功的技术以及如何使用十几个团队来实现这些技术。

1. Git中的故事是什么?




准确记录所有包含对文件所做的更改的提交。在其中,您可以跟踪特定的更改及其进行的时间,或者将当前版本与先前的版本进行比较。在哪里看故事?通过Git Bash输入命令:

git log --oneline

如果提交过多,则可以使用箭头键或Page Up / Page Down键从一个注释切换到另一个注释,就像在其他文件中一样。要退出,请按热键(q)。

2.关于提交的评论


不要写无意义的评论,它们应该简洁明了,不需要解释。他们的任务是指出您对代码进行了哪些更改及其影响。

  • 如何不:“修复index.html”
  • 作法:“提高导航栏的速度”

让我们看看这是干什么的。
想象一下,您正在从事一个如此大型的项目,而该项目中雇用的大多数专家甚至都不知道。您开发了一个新功能,在您的设备上对其进行了测试,然后一切正常。

但是在推动之后,一切突然停止工作,而您首先要检查的是在开发此功能期间所做的更改。在Git日志中,您会发现许多带有“固定”样式的注释的提交。想象一下,您需要花费多少时间来找到合适的!

3.总是提交


提交,提交,然后再次提交。完成功能-添加提交,改进了块元素的样式-添加提交,依此类推。理想情况下,您应该在每次更改时发送一次提交。

也许您在想:为什么会有那么多提交?主要原因是您的新功能可能会与其他人的代码冲突,但是如果您始终进行小的更改,则查找和修复它们将变得更加容易。通过跟踪在同一提交中修改的数十行或数百行,可以节省您的时间。

4.更正关于提交的最后评论


在向本地存储库中添加少量提交后,如果您想更正输入错误或对提交进行更详细的注释该怎么办?使用以下命令进行更改非常简单:

git commit -m “correct message” --amend

请注意:如果您已经开始提交到远程存储库,则最好不要使用此命令。

有关详细信息,请参见官方文档

5.将最后的X次提交合并为一个


情况:发送对新功能的提交,您了解您需要再做一个小更改,进行最小的更改,然后再次提交...结果,5次提交几乎是同一件事。它发生了?这些提交已从Git中故事的一般视图中剔除,但是如果您愿意,可以使用以下命令轻松修复:

git reset HEAD~3

HEAD〜3命令回滚3个最高的提交,包括最近的一次。在此示例中,最后三个提交将从日志中删除,但是代码中的更改将保留在原位。现在是时候查看您需要提交什么代码了,为此,我们输入以下命令:

git stage --diff

您将看到对从历史记录中删除的提交所做的所有更改现在都已编入索引,因此您可以一次又一次提交它们。

请注意,HEAD通常是指您添加的最后一个提交。如果不确定,请检查Git日志。如果您的最后一次提交被冻结(这不是最常见的情况),则HEAD〜1命令将清除冻结分支中的所有提交。要了解更多信息,请参阅文档。

6.删除上一次提交的更改


请小心,因为此方法将擦除所有更改而无法回滚。如果代码结果不符合预期,通常在试验代码后使用。我建议您首先尝试在沙箱存储库中。

git reset –-hard HEAD~1

现在,您的上一次提交以及代码中的所有相关更改都已删除。

7.清除提交历史


清除提交历史记录的最有效方法是使用rebase命令。注意:您可以通过不小心按下错误的键来删除提交。因此,让我们使用以下命令以交互方式运行变基(-i标志):

git rebase -i HEAD~5



输入后,您将在终端内看到最近5次提交的列表(HEAD〜5)。所有提交都按日期排序,也就是说,最新的提交将排在最前面(使用Vim(默认的Git文本编辑器,可以在终端内编辑文本文件)打开此列表)。这里是带有几个有用命令的简短说明。在大多数情况下,您将需要squash和reword命令。

用squash命令替换pick命令将从日志中删除此提交,并且代码中的所有更改都将与pick命令突出显示的最后一次提交分组。

如果要调整注释,可以用reword命令替换pick命令并重写注释。

现在,您可以转到下一个窗口,在该窗口中,您需要为将要使用压胶进行粘合的一组提交编写一个注释。要继续,请按ESC,然后输入:

:wq!

(:)需要 冒号来表示您要传输命令,(w)写入(保存)更改,(q)退出并(!)执行命令。

请注意,每个提交组都会收到您的评论。可以在Git日志中检查结果。

如果由于某种原因您离开此窗口而没有完成操作,则可以随时使用以下命令返回:

git rebase --edit

如果要退出窗口而不保存更改,请按ESC键并输入:

:q!

Vim将收到一个命令,不保存即关闭文件。

8.管理索引


通常,您应该将提交发送到单个文件或一组相关文件。但是,如何在索引编制过程中快速进行更改?

假设您有3个文件,而其中只有2个需要提交。在这种情况下,您可以尝试以下命令:

git add .

现在,从索引中删除不需要的文件:

git reset -- Readme.txt

并检查结果:

git status

从某个扩展名添加所有文件,例如CSS:

git add *.css

误添加了所有内容?然后使用以下命令清除索引:

git reset --

如果需要更复杂的操作,则可以使用对话框模式将文件添加到索引:

git add -i

首先,通过输入适当的数字来选择一个选项,例如(3),以回滚您的操作。

通过选择一个选项,您可以一个接一个地输入要从索引中删除的文件列表。

完成后,按(输入)。

文件以相同的方式添加。使用选项(4)添加未跟踪的文件。

要退出,请进入(q)选项菜单。

9.结论


在推送到远程存储库之前,尤其是在合并分支之前,要做的主要事情是确保整理提交历史记录。将所有内容推送到远程存储库后,将无法修复任何问题。

想更多地了解结对编程并开始远程使用?查看Microverse.org

All Articles