Git:常见错误以及如何修复

如果您曾经从事过一个大型项目,除了您之外,还涉及许多其他程序员,那么您显然将Git用作版本控制系统。 在使用某些东西的过程中,根据类似的Git的复杂程度,每个人都会犯错。


该材料的作者(我们今天将发布其翻译版本)将讨论程序员在使用Git时遇到的常见错误,并讨论如何处理这些错误。

最后提交消息中的错误


经过数小时的良好工作,很容易在提交消息中犯错误。 幸运的是,可以使用以下命令轻松解决此问题:

git commit --amend 

该命令将打开编辑器,并允许您更改提交的最后一条消息。 除了您应该知道自己用三个“ m”写的“ Initial commment”,其他人都没有。

分支名称错误


假设时钟快到15:00了,您还没有吃午饭。 结果,在饥饿的折磨下,您为新的分支feature-brunch命名。 很好,你什么也不能说。

这个问题也可以解决。 您可以使用使用mv命令重命名文件的相同方法来重命名分支。 这是关于用正确的名字将她移到新的地方:

 git branch -m feature-brunch feature-branch 

如果已经将该线程发送到存储库,则需要做几件事来重命名它。 您必须删除旧分支,然后将新分支发送到存储库:

 git push origin --delete feature-brunch git push origin feature-branch 

随机提交更改到主分支


假设您正在开发一个新功能,而您急忙忘了为此创建一个新分支。 您已经提交了一堆文件,所有这些都位于master分支中。 您可以使用以下三个命令将所有这些更改移至新分支。 请注意,如果您没有使用commitstash命令(应用于更改),它们将丢失。

 git branch feature-branch git reset HEAD~ --hard git checkout feature-branch 

结果,将创建一个新分支,更改将在master分支中回滚到进行更改之前的状态,并将过渡到新分支,其中将包含对master所做的所有更改。

处理您忘记添加到上一次提交的文件


使用Git时,另一个常见的疏忽是提交的时间太早,并且没有必要的文件进入它们。 假设您错过了一个文件,忘记了保存它,或者您需要对文件进行一些小的更改,以使最后一次提交有意义。 在这种情况下,-- --amend命令将再次派上用场。 将丢失的文件添加到存储库索引并运行以下命令:

 git add missed-file.txt git commit --amend 

之后,您可以更改提交消息,也可以保持不变。

将错误的文件添加到存储库


如果您的错误与上一个错误完全相反怎么办? 如果您向索引中添加了将不提交的文件怎么办? 它可能是某个ENV文件,一个项目构建目录,您不小心将狗的照片保存在错误的文件夹中。 所有这些都可以解决。

如果您的操作仅限于索引文件,但尚未提交文件,那么使用reset命令可以很容易地解决该问题:

 git reset /assets/img/misty-and-pepper.jpg 

如果您已经取得了足够的进步,并且设法提交了更改,那么请知道这是可以修复的。 您只需要使用一些其他命令:

 git reset --soft HEAD~1 git reset /assets/img/misty-and-pepper.jpg rm /assets/img/misty-and-pepper.jpg git commit 

结果,最后的提交将被取消,图像将被删除,之后新的提交将被放置在应有的位置。

如果一切都出错了怎么办?


现在,我们将要讨论的技术会在出现所有问题的情况下提供帮助。 例如,当您过于热衷于使用StackOverflow复制现成的解决方案时,就会发生这种情况,并且下班后,您的存储库会比刚开始时的状况更糟。 也许我们所有人都陷入了这种情况。

git reflog显示您所做的所有操作的列表。 然后,它允许您使用Git工具回滚更改,以返回到存储库的先前状态之一。 值得注意的是,此方法值得作为最后手段使用,在使用它之前,您应该仔细考虑。 因此,您可以列出使用以下命令完成的操作:

 git reflog 

Git记住我们的所有动作,执行此命令后,您会看到类似以下内容:

 3ff8691 (HEAD -> feature-branch) HEAD@{0}: Branch: renamed refs/heads/feature-brunch to refs/heads/feature-branch 3ff8691 (HEAD -> feature-branch) HEAD@{2}: checkout: moving from master to feature-brunch 2b7e508 (master) HEAD@{3}: reset: moving to HEAD~ 3ff8691 (HEAD -> feature-branch) HEAD@{4}: commit: Adds the client logo 2b7e508 (master) HEAD@{5}: reset: moving to HEAD~1 37a632d HEAD@{6}: commit: Adds the client logo to the project 2b7e508 (master) HEAD@{7}: reset: moving to HEAD 2b7e508 (master) HEAD@{8}: commit (amend): Added contributing info to the site dfa27a2 HEAD@{9}: reset: moving to HEAD dfa27a2 HEAD@{10}: commit (amend): Added contributing info to the site 700d0b5 HEAD@{11}: commit: Addded contributing info to the site efba795 HEAD@{12}: commit (initial): Initial commit 

请注意此列表的最左列。 它包含索引。 如果您需要返回过去的某个时间,请运行以下命令,将{index}替换为适当的链接,例如dfa27a2 。 该命令如下所示:

 git reset HEAD@{index} 

总结


我们研究了一些使用Git处理错误的方法。 我们希望您不会犯此类错误,并且使用Git的这些方法对您没有用。 如果出现问题,您将知道该怎么办。

亲爱的读者们! 您是否知道使用Git的有趣技巧? 如果是这样,请分享。

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


All Articles