Git:修复错误和修复提交

提交错误...如何解决? 提交历史上一团糟...如何使一切看起来都像样? 这篇文章的作者(我们今天将要翻译的译本)说,它是专为提出此类问题的人编写的。 据他介绍,在研究了此处介绍的使用Git的技术之后,您可以在掌握Git的道路上大幅度前进。


假定本文的读者已经熟悉Git的基础知识。 如果不是这样,则首先建议例如通过使用材料来掌握基础。

修复提交中的错误


在这里,我们将研究几种提交错误及其更正的方案。

▍场景1


假设您提交了很多文件,并且意识到提交消息不是很清楚。 之后,您决定更改此消息。 为此,请使用git commit --amend 。 这是其应用示例:

 git commit --amend -m "New commit message" 

▍方案2


假设您要提交六个文件,但错误地仅提交了五个文件。 看来您可以通过创建一个新的提交并在其中添加丢失的第六个文件来解决此错误。

这种方法拥有生命权。 但是,为了使提交历史记录保持良好状态,将随机跳过的文件添加到同一提交中可能会更好。 同样,可以使用git commit --amend 。 它的用法如下所示:

 git add file6 git commit --amend --no-edit 

--no-edit标志意味着提交消息不会更改。

▍方案3


在Git中进行的提交与作者的姓名和电子邮件地址相关联。 通常,通过执行Git的初始配置来指示此数据。 因此,使用Git的人在执行每次提交时可能不会在意有关其作者的信息。

同时,很有可能在处理某些项目时,您将需要使用有关作者的信息,例如,与主要电子邮件地址不同的电子邮件地址。 对于这样的项目,您需要使用以下命令指定电子邮件地址:

 git config user.email "your email id" 

假设您忘记进行此设置,并且已经进行了第一次提交。 纠正这种情况已经可以对我们团队熟悉了。 使用它,您可以更改有关先前提交的作者的信息:

 git commit --amend --author "Author Name <Author Email>" 

▍注意


仅在本地存储库中使用amend命令。 在远程存储库中使用它可能导致巨大的混乱。

整理提交历史


假设您正在为项目编写一段代码。 您知道大约需要十天。 在这十天内,其他开发人员将提交到源存储库。

建议维护本地存储库和远程存储库之间的同步。 这样可以避免由于存储库太稀少而无法同步时发生的许多合并冲突。 按照这种做法,您决定每两天从远程存储库下载一次更改。

每次从远程将代码下载到本地存储库时,都会在本地存储库中创建一个新的合并提交。 这意味着在您的本地提交历史记录中,将有许多这样的提交会使查看代码的人感到困惑。


本地存储库中的提交历史

如何整理提交历史? 要解决此问题,可以使用git rebase

▍Gitrebase命令


git rebase为例。


在Release分支和Feature分支中提交

Release分支中有三个提交: Rcommit1Rcommit2Rcommit3 。 当只有一个commit- Rcommit1时,您从Release分支创建了Feature分支。 之后,您向Feature分支添加了两个提交。 它们是Fcommit1Fcommit2 。 您的目标是将提交从Release分支上传到Feature分支。 为此,您将使用rebase命令。

我们将在考虑中的两个分支使用名称releasefeature

结果,使用rebase将如下所示:

 git checkout feature git rebase release 

re rebase命令的功能


rebase命令用于确保Feature分支具有Release分支中的新鲜代码。

应用此命令时,系统尝试一次将每个提交添加到Feature分支,并检查是否存在冲突。 如果这听起来很复杂,那么让我们看一下下图。 这显示了rebase的内部机制。


功能分支和rebase命令的三个步骤

第一步


调用命令时, Feature分支指向Release分支的开头。 之后, Feature分支中有三个提交: Rcommit1Rcommit2Rcommit3 。 也许在这里您将对Fcommit1Fcommit2发生了什么有疑问。 这些提交尚未消失,将在下一步中使用它们。

第二步


Git现在正在尝试将Fcommit1提交添加到Feature分支。 如果没有冲突, Fcommit1Rcommit3之后添加Rcommit3 。 如果检测到冲突,Git将报告它,您将必须手动解决此冲突。

第三步


将提交Fcommit1添加到Feature分支后,Git Fcommit2尝试在其中添加Fcommit2 。 同样,如果没有冲突,则在Fcommit1之后添加Fcommit1 ,并且操作成功完成。 如果检测到冲突,那么Git将像以前一样报告并提出解决方案。

rebase命令rebase您可以看到在Feature分支中有提交Rcommit1Rcommit2Rcommit3Fcommit1Fcommit2

▍注意


使用Git时,将使用merge命令和rebase命令。 这并不是说其中一个比另一个更可取。

如果使用merge命令,将收到merge提交。 如果使用rebase ,则不会有任何其他rebase

建议您在各种情况下使用这些命令。 因此, rebase适用于根据远程存储库中的最新代码来更新本地存储库代码。 使用merge命令执行合并请求,以将Feature分支与ReleaseMaster分支合并。

总结


研究了本文介绍的概念后,您已经提高了Git技能,并且更接近Git专家的水平。 我们希望您在这里学到的东西对您有用。 但是Git的世界是巨大的,因此,掌握了一些新知识之后,请不要停止并继续前进。

亲爱的读者们! 您是否在git commit中遇到了麻烦?

Source: https://habr.com/ru/post/zh-CN425665/


All Articles