G

Git 教程:如何修复 18 个常见错误

2025-06-04

Git 教程:如何修复 18 个常见错误

本文汇集了团队使用 Git 时最常见的 18 个问题及其解答。有些 Git 问题比较棘手,即使对于经验丰富的 Git 用户来说,也难以解答。例如,您是否忘记了包含某项更改,或者在提交信息中犯了错误?别担心。在这种情况下,您或您的团队所做的更改通常需要回滚或撤消。几乎所有 Git 操作都可以执行此操作,例如提交、合并、本地或远程更改,甚至未提交的更改。所有这些都可以“撤消”。

以下是本文的目录:

  1. 如何创建 Git 分支?
  2. 如何重命名 Git 分支?
  3. 如何删除本地 Git 分支?
  4. 如何删除远程 Git 分支?
  5. 如何通过 Git 签出远程分支?
  6. 如何编辑(修改)Git 提交消息?
  7. 如何撤消最后一次提交?
  8. Git 如何恢复到上一次提交?
  9. 如何恢复已推送到远程的提交?
  10. Git 如何恢复单个文件?
  11. 如何撤消 Git 添加?
  12. 如何从 gGit 中删除文件而不将其从文件系统中删除?
  13. Git Pull 与 Git Fetch
  14. 如何强制“Git pull”覆盖本地文件?
  15. 收到“需要合并”错误时如何推送到 GitHub?
  16. 如何在 GitHub 仓库中创建标签?
  17. 如何在 Git 中克隆所有远程分支?
  18. 如何更新或同步分叉的存储库?

GitHub

1.如何创建Git分支?

在开始创建新分支之前,请确保您的 master/main 已更新最新更改:

 $ git pull
Enter fullscreen mode Exit fullscreen mode

完成上述步骤后,您可以创建新的分支并直接切换到该分支:

 $ git checkout -b <new-branch-name>
Enter fullscreen mode Exit fullscreen mode

或者,您可以直接创建新分支而不切换到该分支:

 $ git branch <new-branch-name>
Enter fullscreen mode Exit fullscreen mode

如果您想要在创建新分支后切换到新分支,只需使用:

 $ git checkout <new-branch-name>
Enter fullscreen mode Exit fullscreen mode

现在分支已创建,您可以将其推送到 GitHub:

 $ git push origin <new-branch-name>
Enter fullscreen mode Exit fullscreen mode

2.如何重命名 Git 分支?

为了重命名 Git 分支,一种选择是首先切换到该分支并按照以下步骤操作:

 $ git checkout <old-branch-name>
Enter fullscreen mode Exit fullscreen mode

之后,您应该会看到一条确认切换成功的消息:

切换到分支

现在您可以通过以下方式重命名分支:

 $ git branch -m <new-branch-name>
Enter fullscreen mode Exit fullscreen mode

重命名 Git 分支的另一种方法是仅使用一行,指定旧名称和新名称:

 $ git branch -m <old-branch-name> <new-branch-name>
Enter fullscreen mode Exit fullscreen mode

重命名 Git 分支后,建议检查其状态:

 $ git branch -a
Enter fullscreen mode Exit fullscreen mode

3.如何删除本地Git分支?

当开发人员开发不同的功能时,他们通常会创建其他分支,与包含主代码的主分支分开。

一旦某个功能的工作完成,通常建议删除该分支。

由于 Git 不允许您删除当前所在的分支,因此您必须先切换到未删除的分支,然后才能删除您想要的分支:

 $ git checkout main // or master
 $ git branch -d <branch-name>
Enter fullscreen mode Exit fullscreen mode

如果分支尚未被推送或合并,您可以使用 -D 而不是 -d 强制删除该分支。

4.如何删除远程 Git 分支?

为了远程删除分支,您应该使用下一个命令:

 $ git push <remote-name> --delete <branch-name>
Enter fullscreen mode Exit fullscreen mode

5.如何使用 Git checkout 远程分支?

在团队协作时,您可能会使用远程仓库,这些仓库可以托管在本地,也可以存放在同事的本地副本中。每个远程仓库都包含各自的分支。要切换到远程分支,您必须先获取该分支的内容,然后再切换到该分支:

 $ git fetch --all
 $ git checkout <remote-branch-name>
Enter fullscreen mode Exit fullscreen mode

6. 如何编辑(修改)Git 提交消息?

出于某些原因,在某些情况下,你可能想要更改提交信息。首先,你需要知道,编辑提交信息实际上意味着创建一个新的提交并替换旧的提交。

如果你还没有将你的提交推送到 GitHub,并且它只存在于你的本地仓库中,这里有一个简单的方法可以更改你最后一次提交的消息。在命令行中转到包含你最后一次提交的仓库,然后输入:

 $ git commit --amend
Enter fullscreen mode Exit fullscreen mode

接下来,您需要编辑提交消息并保存新的提交。下次推送时,您应该能够在 GitHub 上看到新的提交和消息。

您可能已经将提交推送到 GitHub,不用担心,您仍然可以更改最近的提交信息。为此,您需要强制推送包含修改后信息的提交。请注意:我们不建议这样做,因为它会更改您仓库的历史记录,因此请仅在绝对必要的情况下使用此选项。

首先,按照上述步骤操作,然后输入:

 $ git push --force-with-lease <branch-name>
Enter fullscreen mode Exit fullscreen mode

7.如何撤消最后一次提交?

您不小心向 Git 提交了错误的文件,但尚未将提交推送到您的 Git 仓库。由于您尚未推送到远程仓库,因此您的更改尚未公开。此时,您可以撤消更改。撤消上次 Git 提交的最简单方法是执行带有“-soft”选项的 $ git reset 命令,这将保留对文件所做的更改。您必须指定要撤消的提交,在本例中为“HEAD~1”。

 $ git reset --soft HEAD-1
Enter fullscreen mode Exit fullscreen mode

如果要删除最后一次提交,可以执行$ git reset带有 “-hard” 选项的命令。更改将从工作目录和索引中删除,因此您将丢失所有修改

 $ git reset --hard HEAD-1
Enter fullscreen mode Exit fullscreen mode

注意:如果您不熟悉这种符号,“HEAD~1”表示您想要将 HEAD(最后一次提交)重置为日志历史记录中的一次提交之前。

 $ git log --oneline
Enter fullscreen mode Exit fullscreen mode

8.如何恢复到上一个​​提交?

首先,使用 git log 命令获取提交列表以获取提交 ID:

 $ git log --online
Enter fullscreen mode Exit fullscreen mode

如果您想暂时返回到上一次提交,然后返回到原来的位置,您只需检出所需的提交:

 $ git checkout <0c2a9da42>
Enter fullscreen mode Exit fullscreen mode

或者,如果您想在那里进行提交,请继续创建一个新的分支:

 $ git checkout -b old-state <0c2a9da42>
Enter fullscreen mode Exit fullscreen mode

另一方面,如果你想彻底清除此后所做的一切,但你没有推送任何提交,那么也有可能。你只需重置即可:

 $ git reset --hard <0c2a9da42>
Enter fullscreen mode Exit fullscreen mode

如果你已经推送了提交,仍然有办法移除它们。查看下一个主题来了解如何操作。

9. 如何恢复已推送到远程的提交?

如果您已将提交链推送到远程仓库,则“还原”是取消更改的更佳方法。“还原”命令会在提交链末尾添加新的提交。

 $ git revert <0c2a9da42>
Enter fullscreen mode Exit fullscreen mode

10.如何使用 Git 恢复单个文件?

您已对某个文件进行了多项更改并提交。现在您想恢复到先前的文件版本。您可以执行以下操作将单个文件恢复到其先前的状态。

如果文件未提交,您可以使用:

 $ git checkout <filename>
Enter fullscreen mode Exit fullscreen mode

如果文件已经提交,您应该找到提交的哈希值和文件的路径,然后在终端中运行此命令:

 $ git checkout <commit-hash> -- <path/to/file>

 // e.g.
 $ git checkout <0c2a9da42> -- assets/main.css
Enter fullscreen mode Exit fullscreen mode

您可以轻松查看对给定文件进行修改的提交,并且可以通过运行以下命令获取正确的提交哈希

 $ git log path/to/file
Enter fullscreen mode Exit fullscreen mode

11.如何撤消Git add?

您使用 $ git add 命令将多个文件移动到暂存区,但不再希望成为提交的一部分,那么简单的重置就可以完成这项工作:

 // for all files
 $ git reset  // OR
 $ git reset HEAD // OR
 $ git reset 
Enter fullscreen mode Exit fullscreen mode

如果你想取消暂存单个文件,你可以使用:

 // for single file
 $ git reset <filename> // OR
 $ git reset HEAD <filename> // OR
 $ git reset @ <filename> 
Enter fullscreen mode Exit fullscreen mode

您所做的更改仍将保留在文件中。上述命令只是将该文件从暂存区中移除。该$ git reset命令允许您将当前分支重置为特定状态。您可以重置特定文件以及整个分支的状态。

注意:HEAD是对当前提交的引用。从 Git v1.8.5 开始, @单独是 head 的快捷方式。

12. 如何从 Git 中删除文件而不将其从文件系统中删除?

你在 Git 上提交了错误的文件,或者你忘记将文件添加到 .gitignore 并提交。现在你想从 Git 中删除该文件,但又不想将其从本地开发环境中移除。

使用 Git 移除单个文件但不删除它:

 $ git rm --cached <filename>
Enter fullscreen mode Exit fullscreen mode

使用 Git 移除多个文件而不删除它们

 $ git rm --cached <filename1 filename2 filename3> 
Enter fullscreen mode Exit fullscreen mode

使用 Git 移除单个目录但不删除它:

 $ git rm --cached <directory-name>
Enter fullscreen mode Exit fullscreen mode

--cached只会从索引中删除,但不允许删除本地系统上的文件。运行 后,远程存储库中的文件将被删除$ git push

13. Git Pull 与 Git Fetch

Git pull 和 fetch 是两个常用的命令,因此了解它们之间的区别将会很有用。

假设你正在处理一个克隆仓库,它本质上是另一个仓库的副本。在这种情况下,保持其与原始仓库同步最新更改非常重要。为了做到这一点并将这些更改本地化,你需要使用上述命令。

 $ git fetch
Enter fullscreen mode Exit fullscreen mode

此命令允许您从另一个存储库下载对象,但不会执行任何文件传输,这意味着它不会在本地进行任何更改。基本上,它只是检查是否有任何可用的更改。

 $ git pull
Enter fullscreen mode Exit fullscreen mode

这条命令会从远程仓库拉取更改,并将它们与本地分支集成。换句话说,git pull 与 git fetch 的作用相同,只是前者后面会执行一些额外的操作:

 // e.g.  
 $ git merge
Enter fullscreen mode Exit fullscreen mode

14.如何强制“git pull”覆盖本地文件?

如果您想用远程分支的副本覆盖所有内容,请注意,您将放弃所有本地更改。
如果您有尚未推送的本地提交,这些提交也将丢失。
要覆盖/重置本地文件,请按照以下步骤操作:

 $ git fetch --all
 $ git reset --hard origin/<branch-name>
Enter fullscreen mode Exit fullscreen mode

15. 收到“需要合并”错误时如何推送到 GitHub?

如果您在尝试将更改推送到分支之前没有运行 $ git pull,则会收到合并错误。当您收到此错误时,通常意味着其他人已将提交推送到您尝试推送到的同一分支,但您尚未在本地拥有该提交。
要解决此问题,请运行以下代码:

 $ git pull origin <branch-name>
 $ git push origin <branch-name>
Enter fullscreen mode Exit fullscreen mode

如果您想强制推送,即不想将本地分支与远程分支合并,则可以使用以下语法:

 $ git push -f origin <branch-name>
Enter fullscreen mode Exit fullscreen mode

16.如何在GitHub仓库中创建标签?

Git 支持两种类型的标签:轻量级标签带注释的标签轻量级
标签非常类似于一个不会更改的分支——它只是指向特定提交的指针。而带注释的标签则以完整对象的形式存储在 Git 数据库中。它们经过校验和;包含标记者的姓名、电子邮件地址和日期;并带有标记消息。通常建议创建带注释的标签。

创建轻量级标签:

 $ git tag <tagname> // e.g $ git tag v1.0.0
Enter fullscreen mode Exit fullscreen mode

创建注释标签(推荐):

 $ git tag -a <tagname> // e.g $ git tag -a v1.0.0
 // or create tag with message
 $ git tag -a <tagname> -m "tag description" // e.g $ git tag -a v1.0.0 -m "First release"
Enter fullscreen mode Exit fullscreen mode

推送到远程仓库时,默认不包含标签。您需要明确说明要将标签推送到远程仓库。

推送所有本地标签:

 $ git push origin --tags
Enter fullscreen mode Exit fullscreen mode

推送单个标签:

 $ git push origin <tagname>
Enter fullscreen mode Exit fullscreen mode

要列出所有标签,请使用以下命令:

 $ git tag
Enter fullscreen mode Exit fullscreen mode

17. 如何在 Git 中克隆所有远程分支?

您可以使用git clone 命令克隆本地 Git 仓库。它会将整个仓库克隆到您的系统,然后将当前工作目录更改为克隆的仓库文件夹。

 $ git clone git://account_name/reponame
 $ cd reponame
Enter fullscreen mode Exit fullscreen mode

如果您想要一次获取多个远程分支,请执行以下操作:

 $ git pull --all
Enter fullscreen mode Exit fullscreen mode

接下来,查看存储库中的本地分支:

 $ git branch 
 * main
Enter fullscreen mode Exit fullscreen mode

但是你的仓库里还隐藏着其他分支!你可以使用 -a 参数查看它们:

 $ git branch -a
 * main
   remotes/origin/HEAD
   remotes/origin/main
   remotes/origin/another-branch
Enter fullscreen mode Exit fullscreen mode

如果您只是想快速浏览一下上游分支,您可以直接查看:

 $ git checkout origin/another-branch
Enter fullscreen mode Exit fullscreen mode

但是如果您想在该分支上工作,则需要创建一个本地跟踪分支,该分支通过以下方式自动完成:

 $ git checkout another-branch
Enter fullscreen mode Exit fullscreen mode

18. 如何更新或同步分叉的存储库?

您已成功 fork 出您感兴趣的仓库。您需要使其与原始仓库保持同步更新。原始仓库通常被称为“上游 (upstream)”。

打开终端,并在本地计算机上导航到克隆的仓库。本地仓库并非直接链接到原始仓库。您必须在 Git 中配置一个指向上游仓库的远程仓库。

 $ git remote -v // list all remote 
 $ git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git
 $ git remote -v // verify the new upstream repository
Enter fullscreen mode Exit fullscreen mode

将您的存储库与上游同步需要两个步骤:首先,您必须从远程获取,然后您必须将所需的分支合并到您的本地分支中。

 $ git fetch upstream
 $ git checkout main
 $ git merge upstream/main
Enter fullscreen mode Exit fullscreen mode

完成初始上游设置和主要检查后,您需要做的就是运行以下命令将您的主要内容与上游同步:

 $ git pull upstream main
Enter fullscreen mode Exit fullscreen mode

github 如何

最后的想法

感谢阅读!以下是 Git 开发者经常问的 18 个问题。希望您找到了想要的答案。如果您在 Git 中遇到的问题不在列表中,请在下方评论区与我们分享。

额外资源
查看我们的最新存储库:

文章来源:https://dev.to/creativetim_official/git-tutorial-how-to-fix-18-common-mistakes-4een
PREV
如何在 Web 开发人员工作期间预防倦怠
NEXT
💼 从开发者到创始人:每个开发者转型为企业家都应该读的 6 本书