如何在GitHub和VS Code中保持分支最新,并解决合并冲突

你好{用户名},我们在你之前合并了一个Pull Request请解决合并冲突,以便我们审查并合并你的Pull Request在等待你的Pull Request被审查和合并时,你有没有收到过这样的消息?然后,你开始恐慌,因为你...

嘿 {username},我们之前合并了一个比你的更早的PR。请解决合并冲突,以便我们可以审查并合并你的PR。

有没有收到过这样的消息,当你等待你的拉取请求被审查和合并时,维护者给你发送了这样的消息?然后,你手忙脚乱,因为不知道该做什么?或者你正在考虑关闭你的拉取请求,重新开始一切,并提交一个新的拉取请求?

好消息是,你不是一个人。

在本文中,我将向你展示如何保持你的远程和本地分支的最新状态。我将指导你在GitHub和VS Code中解决合并冲突。

目录

前提条件

为了跟随本教程,你需要以下内容:

理解合并冲突

当两个分支中的同一文件的同一行的两个提交有更改时,通常会发生合并冲突。有时候,当某人编辑文件时,另一个人删除了它,也会发生合并冲突。

问题是,Git无法自行解决冲突。它需要你的帮助来决定哪些更改应该保留。

当发生合并冲突时,你会在GitHub的拉取请求中看到一个通知,告诉你该分支存在必须解决的冲突。当合并冲突发生时,维护者无法合并拉取请求。这是因为在冲突解决前,合并按钮是禁用的。

branch-has-conflicts
GitHub拉取请求上的警告:该分支存在必须解决的冲突

如何保持分支最新

保持你的分支最新至关重要。强烈建议定期更新你的远程和本地main分支和工作分支。

以下是更新分支的最佳时机:

  • 在你创建一个用于解决问题的新分支之前
  • 在提交最新更改并将其推送到远程仓库之前
  • 当你等待你的拉取请求被审查时

当一个拉取请求被合并而你的还在等待审查时,你的拉取请求会显示一个警告。这会告诉你,你的分支落后于upstream(原始)存储库的main分支。

branch-out-of-date
GitHub拉取请求上的警告:该分支与基础分支不同步

如何更新你在派生存储库中的main分支

  1. 访问你在GitHub中派生的存储库。
  2. 点击“同步派生/同步分支”按钮。
  3. 点击绿色的“更新分支”按钮。
update-branch
GitHub 上的 “同步分支” 和 “更新分支” 按钮。

在您更新分支后,您将在顶部看到一个通知,告诉您分支已经是最新的。

up-to-date-branch-github
GitHub 上的通知:此分支已与 organization-name/repository-name:main 同步。

如何更新本地分支

现在,您的远程main分支已更新。让我们通过终端更新您的本地分支。

步骤 #1 – 切换到您的工作分支

在终端中,使用以下命令切换到您的工作分支:

git checkout branch-name

步骤 #2 – 拉取更改

从您的origin(派生)存储库的main分支拉取最新更改到您的本地分支。

git pull origin main

步骤 #3 – 推送更改

将这些更改推送到您的远程分支。如果需要解决冲突,您必须在推送更改之前解决它们。

git push

如何解决合并冲突

只有在工作分支是最新的情况下才能开始解决合并冲突。解决冲突有两种方法:

  1. 在 GitHub 上
  2. 在您的 VS Code 中

1. 在 GitHub 上解决合并冲突

只有当冲突的原因是来自两个不同分支的同一行(或几行)的更改时,才能直接在 GitHub 上解决冲突。对于其他类型的冲突,您必须在代码编辑器中本地解决。

按照以下步骤在 GitHub 上解决冲突:

步骤 #1 – 点击 “解决冲突” 按钮

首先,转到 GitHub 上的upstream存储库。然后,点击 “Pull request” 选项卡。找到并打开您的拉取请求,然后向下滚动。

在末尾,您将找到 “解决冲突” 按钮。

resolved-conflicts-button
GitHub 上的 “此分支存在必须解决的冲突” 通知和 “解决冲突” 按钮。

步骤 #2 – 仔细查看冲突

点击 “解决冲突” 按钮后,您将被重定向到GitHub的冲突编辑器。

github-resolve-conflict-2
GitHub 的冲突编辑器

您可以在左侧边栏看到存在冲突的文件。在顶部菜单栏上,您可以找到文件中的冲突数量。在文件本身中,有冲突标记<<<<<<<=======>>>>>>>

<<<<<<< 分支名=======之间的行是您的更改。在=======>>>>>>> main之间的任何内容都是upstream存储库的main分支中的更改。

您需要查看冲突并决定要保留哪个冲突,或者是否需要进行全新更改。

步骤#3 – 解决冲突

在你决定如何解决冲突之后,删除冲突标记 <<<<<<<=======>>>>>>>。然后你可以进行更改。如果文件中有多个冲突,请向下滚动并逐个解决它们,然后标记为已解决。

一旦你解决了所有冲突,点击顶部栏的”标记为已解决”按钮。

mark-as-resolved
GitHub上的”标记为已解决”按钮。

如果其他文件中存在冲突,请点击左侧边栏中的文件名以打开该文件。然后按照相同的步骤解决冲突。

步骤#4 – 点击”提交合并”按钮

当所有冲突文件中的冲突都被标记为已解决后,右上方会出现一个绿色的”提交合并”按钮。点击该按钮提交你的更改。

commit-merge-btn
GitHub上的”提交合并”按钮。

2. 在VS Code中解决合并冲突

在从你 fork 仓库的 “main” 分支拉取最新更改后,你将会看到冲突标记 <<<<<<<=======>>>>>>> 之间的行。

你还会看到解决冲突的选项:

  • 接受当前更改:当你只想保留自己的更改时。
  • 接受传入的更改:当你只想保留来自 “main” 分支的更改时。
  • 同时接受两处更改:当你希望保留你的更改以及来自 “main” 分支的更改时。
merge-conflicts-vscode
VS Code中的合并冲突。

<<<<<<< HEAD (当前更改)======= 之间的行是你的更改。而 =======>>>>>>>哈希号 (传入更改) 之间的内容是来源于你 fork 仓库的 “main” 分支的更改。

按照以下步骤解决VS Code中的冲突:

步骤#1 – 解决冲突

仔细查看冲突标记之间的冲突情况,并决定如何解决冲突。

  • 你可以手动删除冲突标记 <<<<<<<=======>>>>>>>,然后进行更改。

或者

  • 你可以选择并点击顶部的接受选项之一,并根据你的需求修改更改。
撤销合并

如果你感到困惑并想撤销合并,从头开始重新做一切,请在提交更改之前运行 git merge --abort 命令。它将中止合并并将你的文件恢复到冲突之前的状态。

步骤#2 – 提交你的更改

一旦你完成冲突的解决,你必须提交你的更改。运行以下命令自动暂存并提交更改:

git commit -am "你的消息"
理解 git commit -am 命令

命令git commit -am与先运行git add .然后运行git commit -m是不同的。

运行git add .将会将所有文件(包括新创建的文件)添加到暂存区。而将-a标志添加到git commit,它将自动将您以前提交的任何文件加入暂存区。这包括已删除的跟踪文件,但不包括新创建的文件。

因此,将-a-m标志结合使用可以跳过暂存阶段,直接编写提交的消息。

步骤3 – 推送更改

现在,您可以使用以下命令将更改推送到远程分支:

git push

最后的话

如果您喜欢并发现本文有帮助,请与他人分享。您可以在我的博客上找到其他作品,并让我们在X(以前是Twitter)LinkedIn上互连。


Leave a Reply

Your email address will not be published. Required fields are marked *