如果您曾经与许多开发者一起开发一个大项目,那么使用 Git 作为版本控制是一个好选择。 不过 Git 很复杂,使用过程中经常会犯各种错误。 在本文中,我将讨论程序员在使用Git时所犯的一些常见错误以及如何解决它们。
经过几个小时的编码后,您的提交消息可能存在很多拼写错误,好在有一个简单的解决方案:
git?commit?--amend?
该命令将打开您的编辑器,并允许您更改最后一次提交消息。 因为可能没人会注意到你写的 “Initial commment” 有三个 m。
假设已经是下午三点了,但是你还没有吃午饭。饥肠辘辘的你可能直接就用 feature-brunch 作为你的分支名了,哇塞,好美味啊。可是很明显你写错了,应该是 feature-branch 。所以你可以使用 mv
你可以使用 mv 命令类似重命名文件的方式重命名此分支:将其移动到具有正确名称的新位置。
如:
git?branch?-m?feature-brunch?feature-branch?
但如果您已推送此分支,则需要执行几个额外步骤。 我们需要从远程删除旧分支并推送新分支:
git?push?origin?--delete?feature-brunch?git?push?origin?feature-branch?
你可能正在开发一项新功能,由于太仓促,你忘记为它打开一个新的分支。 这时候已经提交了大量文件,而且这些提交都位于主分支上。
现在我们需要使用以下三个命令将所有这些更改回滚到新分支:
注意:确保先提交或存储更改,否则一切都将丢失!
git?branch?feature-branch?git?reset?HEAD~?--hard?git?checkout?feature-branch?
这将创建一个新分支,然后将主分支回滚到您进行更改之前的位置,然后最终检出您之前所有更改完整的新分支。
另一个常见的 Git 陷阱是过早提交。你可能错过了一个文件,忘了保存它,或者需要对最后一次提交做一个小改动。 这时候 --amend 再次成为你的朋友。
添加忘掉的文件,然后运行该此靠谱命令:
git?add?missed-file.txt?git?commit?--amend?
此时,您可以修改提交消息,也可以只保存它以使其保持不变。
但是如果你做的恰恰相反呢? 如果您添加了一个不想提交的文件,该怎么办? 一个流氓ENV文件,一个构建目录,一个你不小心保存到错误文件夹的狗的图片? 这一切都是可以解决的。
如果您所做的只是暂存文件但尚未提交,那就像重置该暂存文件一样简单:
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?
上述命令将撤消提交,删除图像,然后在其位置添加新提交。
这个命令适用于一切都出错的地方。 当您从Stack Overflow中复制粘贴太多解决方案时,您的repo处于比启动时更糟糕的状态。 我们都去过那儿。
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技巧吗? 欢迎分享!
本文翻译自?Medium
领取专属 10元无门槛券
私享最新 技术干货