zoukankan      html  css  js  c++  java
  • 6种常见的Git错误以及解决的办法

    我们都会犯错误,尤其是在使用像Git这样复杂的东西时。如果你是Git的新手,可以学习如何在命令行上开始使用Git。下面介绍如何解决六个最常见的Git错误。


    Photo by Pawel Janiak on Unsplash

    1. 最后一次代码提交时有拼写错误

    经过几个小时的编码后,拼写错误很容易带到你的提交消息里面。 幸运的是,有一个简单的解决方案。

    git commit --amend

    这会打开编辑器,并允许你更改最后一次提交消息。 没有人知道你把“addded”单词多加了一个字母“d”的拼写错误。

    2. 忘了在最后一次提交中添加文件

    另一个常见的Git陷阱是过早提交。 你少添加了一个文件,忘了保存它,或者需要对最后一次提交做一个小改动才有意义。 --amend 再次成为你的朋友。

    添加错过的文件然后运行该命令。

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

    此时,可以修改提交消息,也可以只保存它以使其保持不变。

    3. 在代码库中添加了一个不想要的文件

    但如果你的做法的正好相反呢?如果添加了不想提交的文件怎么办?一个环境文件,一个构建目录,或者是一张图片不小心保存到错误的目录?这都是可以解决的。
    如果你所做的只是对文件进行了stage操作放入了暂存区,还没有commit本地代码仓库,那么只需重新设置暂存区的文件即可:

    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

    这将撤销提交,删除图片文件,然后在其位置添加一个新的提交。

    4. 提交了所有的修改到 master 分支

    你正在开发一个新特性,在匆忙之中,忘记为它打开一个新的分支。已经提交了一堆文件,现在它们都位于主分支(master)上。幸运的是,GitLab可以防止你直接推到master 主分支上。因此,我们可以使用以下三个命令将所有这些更改回滚到一个新分支:

    Note
    确保首先commit或stash更改,否则所有更改都将丢失!

    git branch future-brunch
    git reset HEAD~ --hard
    git checkout future-brunch

    这会创建一个新分支,然后将主分支回滚到进行更改之前的位置,然后最终检出新分支,并保留所有先前的更改。

    5. 分支名称出现了拼写错误

    对错误分支进行重命名的方式与用mv命令重命名文件的方式类似:将它移动到一个新的位置,并使用正确的名称。例如把future-brunch分支名称更改为feature-branch。

    git branch -m future-brunch feature-branch

    如果已经push了这个分支到远程代码仓库,那么还需要一些额外的步骤。需要从远程代码仓库删除旧的分支,将新分支 push 上去:

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

    6. 重复操作

    这个命令适用于一切都出错的地方。 当从Stack Overflow复制粘贴一个太多的解决方案时,
    代码仓库处于比你一开始时更糟糕的状态。
    git reflog向你显示所有的事情列表。然后,它允许你使用Git的神奇时间旅行技巧,回退到过去的任何时间点。这里应该指出,这是最后的手段,不应该轻易使用。要得到这个列表,输入:

    git reflog

    我们采取的每一步,我们所做的每一个动作,Git都有记录。 在我们的项目上运行该命令得到以下列表:

    3ff8691 (HEAD -> feature-branch) HEAD@{0}: Branch: renamed refs/heads/future-brunch to refs/heads/feature-branch
    3ff8691 (HEAD -> feature-branch) HEAD@{2}: checkout: moving from master to future-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,但是还是忍不住保存了下来。如果自己以后的过程遇到了这方面的知识,还是可以翻出来看看的
  • 相关阅读:
    ADO数据库操作
    AfxMessageBox和MessageBox区别
    Qt — 子窗体操作父窗体中的方法
    Qt — tableWidget插入复选框
    Qt & MySQL
    windows下安装Qt
    Extjs — Grid数据导出成Excel
    Mac终端 vi/vim 的简单使用
    iOS开发CocoaPods使用说明
    Shell 脚本学习笔记十:Shell输入输出重定向
  • 原文地址:https://www.cnblogs.com/Davi123/p/9504378.html
Copyright © 2011-2022 走看看