提交错误...如何解决? 提交历史上一团糟...如何使一切看起来都像样? 这篇文章的作者(我们今天将要翻译的译本)说,它是专为提出此类问题的人编写的。 据他介绍,在研究了此处介绍的使用Git的技术之后,您可以在掌握Git的道路上大幅度前进。
假定本文的读者已经熟悉Git的基础知识。 如果不是这样,则首先建议例如通过使用
此材料来掌握基础。
修复提交中的错误
在这里,我们将研究几种提交错误及其更正的方案。
▍场景1
假设您提交了很多文件,并且意识到提交消息不是很清楚。 之后,您决定更改此消息。 为此,请使用
git commit --amend
。 这是其应用示例:
git commit --amend -m "New commit message"
▍方案2
假设您要提交六个文件,但错误地仅提交了五个文件。 看来您可以通过创建一个新的提交并在其中添加丢失的第六个文件来解决此错误。
这种方法拥有生命权。 但是,为了使提交历史记录保持良好状态,将随机跳过的文件添加到同一提交中可能会更好。 同样,可以使用
git commit --amend
。 它的用法如下所示:
git add file6 git commit
--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
分支中有三个提交:
Rcommit1
,
Rcommit2
和
Rcommit3
。 当只有一个commit-
Rcommit1
时,您从
Release
分支创建了
Feature
分支。 之后,您向
Feature
分支添加了两个提交。 它们是
Fcommit1
和
Fcommit2
。 您的目标是将提交从
Release
分支上传到
Feature
分支。 为此,您将使用
rebase
命令。
我们将在考虑中的两个分支使用名称
release
和
feature
。
结果,使用
rebase
将如下所示:
git checkout feature git rebase release
re rebase命令的功能
rebase
命令用于确保
Feature
分支具有
Release
分支中的新鲜代码。
应用此命令时,系统尝试一次将每个提交添加到
Feature
分支,并检查是否存在冲突。 如果这听起来很复杂,那么让我们看一下下图。 这显示了
rebase
的内部机制。
功能分支和rebase命令的三个步骤第一步
调用命令时,
Feature
分支指向
Release
分支的开头。 之后,
Feature
分支中有三个提交:
Rcommit1
,
Rcommit2
和
Rcommit3
。 也许在这里您将对
Fcommit1
和
Fcommit2
发生了什么有疑问。 这些提交尚未消失,将在下一步中使用它们。
第二步
Git现在正在尝试将
Fcommit1
提交添加到
Feature
分支。 如果没有冲突,
Fcommit1
在
Rcommit3
之后添加
Rcommit3
。 如果检测到冲突,Git将报告它,您将必须手动解决此冲突。
第三步
将提交
Fcommit1
添加到
Feature
分支后,Git
Fcommit2
尝试在其中添加
Fcommit2
。 同样,如果没有冲突,则在
Fcommit1
之后添加
Fcommit1
,并且操作成功完成。 如果检测到冲突,那么Git将像以前一样报告并提出解决方案。
rebase
命令
rebase
您可以看到在
Feature
分支中有提交
Rcommit1
,
Rcommit2
,
Rcommit3
,
Fcommit1
和
Fcommit2
。
▍注意
使用Git时,将使用
merge
命令和
rebase
命令。 这并不是说其中一个比另一个更可取。
如果使用
merge
命令,将收到
merge
提交。 如果使用
rebase
,则不会有任何其他
rebase
。
建议您在各种情况下使用这些命令。 因此,
rebase
适用于根据远程存储库中的最新代码来更新本地存储库代码。 使用
merge
命令执行合并请求,以将
Feature
分支与
Release
或
Master
分支合并。
总结
研究了本文介绍的概念后,您已经提高了Git技能,并且更接近Git专家的水平。 我们希望您在这里学到的东西对您有用。 但是Git的世界是巨大的,因此,掌握了一些新知识之后,请不要停止并继续前进。
亲爱的读者们! 您是否在git commit中遇到了麻烦?
