如何在GitHub和VS Code中保持分支最新,并解决合并冲突
你好{用户名},我们在你之前合并了一个Pull Request请解决合并冲突,以便我们审查并合并你的Pull Request在等待你的Pull Request被审查和合并时,你有没有收到过这样的消息?然后,你开始恐慌,因为你...
嘿 {username},我们之前合并了一个比你的更早的PR。请解决合并冲突,以便我们可以审查并合并你的PR。
有没有收到过这样的消息,当你等待你的拉取请求被审查和合并时,维护者给你发送了这样的消息?然后,你手忙脚乱,因为不知道该做什么?或者你正在考虑关闭你的拉取请求,重新开始一切,并提交一个新的拉取请求?
好消息是,你不是一个人。
在本文中,我将向你展示如何保持你的远程和本地分支的最新状态。我将指导你在GitHub和VS Code中解决合并冲突。
目录
前提条件
为了跟随本教程,你需要以下内容:
理解合并冲突
当两个分支中的同一文件的同一行的两个提交有更改时,通常会发生合并冲突。有时候,当某人编辑文件时,另一个人删除了它,也会发生合并冲突。
问题是,Git无法自行解决冲突。它需要你的帮助来决定哪些更改应该保留。
当发生合并冲突时,你会在GitHub的拉取请求中看到一个通知,告诉你该分支存在必须解决的冲突。当合并冲突发生时,维护者无法合并拉取请求。这是因为在冲突解决前,合并按钮是禁用的。
如何保持分支最新
保持你的分支最新至关重要。强烈建议定期更新你的远程和本地main
分支和工作分支。
以下是更新分支的最佳时机:
- 在你创建一个用于解决问题的新分支之前
- 在提交最新更改并将其推送到远程仓库之前
- 当你等待你的拉取请求被审查时
当一个拉取请求被合并而你的还在等待审查时,你的拉取请求会显示一个警告。这会告诉你,你的分支落后于upstream
(原始)存储库的main
分支。
如何更新你在派生存储库中的main
分支
- 访问你在GitHub中派生的存储库。
- 点击“同步派生/同步分支”按钮。
- 点击绿色的“更新分支”按钮。
在您更新分支后,您将在顶部看到一个通知,告诉您分支已经是最新的。
如何更新本地分支
现在,您的远程main
分支已更新。让我们通过终端更新您的本地分支。
步骤 #1 – 切换到您的工作分支
在终端中,使用以下命令切换到您的工作分支:
git checkout branch-name
步骤 #2 – 拉取更改
从您的origin
(派生)存储库的main
分支拉取最新更改到您的本地分支。
git pull origin main
步骤 #3 – 推送更改
将这些更改推送到您的远程分支。如果需要解决冲突,您必须在推送更改之前解决它们。
git push
如何解决合并冲突
只有在工作分支是最新的情况下才能开始解决合并冲突。解决冲突有两种方法:
- 在 GitHub 上
- 在您的 VS Code 中
1. 在 GitHub 上解决合并冲突
只有当冲突的原因是来自两个不同分支的同一行(或几行)的更改时,才能直接在 GitHub 上解决冲突。对于其他类型的冲突,您必须在代码编辑器中本地解决。
按照以下步骤在 GitHub 上解决冲突:
步骤 #1 – 点击 “解决冲突” 按钮
首先,转到 GitHub 上的upstream
存储库。然后,点击 “Pull request” 选项卡。找到并打开您的拉取请求,然后向下滚动。
在末尾,您将找到 “解决冲突” 按钮。
步骤 #2 – 仔细查看冲突
点击 “解决冲突” 按钮后,您将被重定向到GitHub的冲突编辑器。
您可以在左侧边栏看到存在冲突的文件。在顶部菜单栏上,您可以找到文件中的冲突数量。在文件本身中,有冲突标记<<<<<<<
、=======
和>>>>>>>
。
<<<<<<< 分支名
和=======
之间的行是您的更改。在=======
和>>>>>>> main
之间的任何内容都是upstream
存储库的main
分支中的更改。
您需要查看冲突并决定要保留哪个冲突,或者是否需要进行全新更改。
步骤#3 – 解决冲突
在你决定如何解决冲突之后,删除冲突标记 <<<<<<<
,=======
,>>>>>>>
。然后你可以进行更改。如果文件中有多个冲突,请向下滚动并逐个解决它们,然后标记为已解决。
一旦你解决了所有冲突,点击顶部栏的”标记为已解决”按钮。
如果其他文件中存在冲突,请点击左侧边栏中的文件名以打开该文件。然后按照相同的步骤解决冲突。
步骤#4 – 点击”提交合并”按钮
当所有冲突文件中的冲突都被标记为已解决后,右上方会出现一个绿色的”提交合并”按钮。点击该按钮提交你的更改。
2. 在VS Code中解决合并冲突
在从你 fork 仓库的 “main” 分支拉取最新更改后,你将会看到冲突标记 <<<<<<<
,=======
,>>>>>>>
之间的行。
你还会看到解决冲突的选项:
- 接受当前更改:当你只想保留自己的更改时。
- 接受传入的更改:当你只想保留来自 “main” 分支的更改时。
- 同时接受两处更改:当你希望保留你的更改以及来自 “main” 分支的更改时。
<<<<<<< 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