问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

通过提取、合并和拉取更新代码

创作时间:
作者:
@小白创作中心

通过提取、合并和拉取更新代码

引用
1
来源
1.
https://learn.microsoft.com/zh-cn/azure/devops/repos/git/pulling?view=azure-devops

在多人协作的项目中,如何及时获取并整合其他开发者的代码更新是一个关键问题。本文将详细介绍如何使用Git的提取(fetch)、合并(merge)和拉取(pull)操作来更新本地代码仓库,确保你的工作与团队保持同步。

通过提取、合并和拉取更新代码

当项目有多个参与者时,通过下载和集成其他人上传到项目远程存储库的工作来更新本地 Git 存储库。 以下 Git 命令更新本地存储库:

  • Git fetch 下载其他人上传到远程存储库的任何新提交。 本地存储库缓存中的远程跟踪分支会更新 - 本地分支保持不变。
  • Git merge 将来自一个或多个源分支的提交集成到目标分支中。
  • Git rebase 将来自源分支的提交集成到目标分支中,但使用的策略与 Git merge 不同。
  • Git pull 执行提取操作,然后执行合并或变基操作,以将提取的提交集成到当前本地分支中。

在将本地存储库与远程存储库同步时,Visual Studio 会使用一部分这些 Git 命令。

通过提取下载更改

Git 提取下载本地存储库中不存在的远程分支提交和引用的文件对象,并更新本地存储库缓存中的远程跟踪分支。 远程跟踪分支是远程分支的本地缓存只读副本,而不是本地分支。 Git 提取不会更新本地分支。 例如,如果 origin 指定的远程存储库具有一个 bugfix3 分支,则 Git 提取将更新名为 origin/bugfix3 的远程跟踪分支而不是本地 bugfix3 分支。

可以使用远程跟踪分支:

  • 将远程跟踪分支与本地分支进行比较,以查看提取的更改。
  • 将远程跟踪分支合并到本地分支中。
  • 从远程跟踪分支创建新的本地分支。

使用 Visual Studio 2022 进行提取

在“Git 更改”窗口中,选择“提取”。 然后选择“传出/传入”以打开“Git 存储库”窗口。

还可以从“Git”菜单中选择“提取”。

在“Git 存储库”窗口中,提取的提交显示在“传入”部分中。 选择一个提取的提交以查看该提交中已更改文件的列表。 选择一个已更改文件以查看已更改内容的差异视图。

使用 Visual Studio 2019 进行提取

在“团队资源管理器”中,选择“主页”,然后选择“同步”以打开“同步”视图。

在“同步”视图中,选择“提取”。 两个“提取”按钮执行相同的操作。 下载后,提取的提交将显示在“传入提交”部分中。

在“传入提交”部分中,右键单击提交,然后选择“查看提交详细信息”以查看已更改文件。

在“提交详细信息”窗口中,已更改文件在“更改”部分中列出。 双击已更改文件以打开已更改内容的差异视图。

命令行提取

若要从特定远程分支下载新提交,请运行 Git fetch 命令:

git fetch <remote repo> <remote branch name>

若要对所有远程分支运行 Git fetch,请使用:

git fetch <remote repo>

当你克隆远程存储库时,Git 将别名 origin 指定为克隆的远程存储库的 URL 的简写形式。 运行 git remote -v 以检查 origin 别名值。 要手动添加 origin 别名,请运行 git remote add origin 。 使用 origin 别名,可以将 Git fetch 命令简化为:

git fetch

通过合并或变基更新分支

Git 合并和 Git 变基将来自源分支的提交集成到当前本地分支(目标分支)中。 Git合并执行快进或非快进合并。 非快进合并也称为三向合并或 true 合并。 Git变基是另一种合并类型。

合并

对于 Git 合并,如果目标分支的尖端存在于源分支中,则默认合并类型将为快进合并。 否则,默认合并类型将为非快进合并。

快进Git 合并永远不会有合并冲突,因为如果目标分支的尖端已经从源分支偏离,Git 就不会应用快进合并。 默认情况下,Git 尽可能使用快进合并。 例如,Git 将对本地分支(你仅通过从它的远程对应分支拉取来更新它)应用快进合并。

非快进Git 合并会生成一个新的目标分支“合并提交”,将源分支更改与目标分支更改集成。 适用的更改是在最后一次提交(对两个分支通用)之后进行的更改。 在上图中,提交 C 是两个分支中的最后一个通用提交。 如果任何源分支更改与任何目标分支更改冲突,则 Git 将提示你解决合并冲突。 合并提交 (L) 包含集成的源分支和目标分支更改。 源分支尖端和目标分支尖端(K 和 E)是合并提交的父级。 在分支的提交历史记录中,合并提交是有用的合并操作标记,并清楚地显示合并的分支。

Git 合并仅修改目标分支,源分支保持不变。 遇到一个或多个合并冲突时,必须解决这些冲突才能完成合并。 或者,可以取消合并操作,并将目标分支返回到其以前的状态。

使用 Visual Studio 2022 进行合并

从菜单栏中选择“Git”>“管理分支”以打开“Git 存储库”窗口。

在“Git 存储库”窗口中,右键单击目标分支并选择“签出”。

右键单击源分支,并选择“将 合并到 ”。

成功合并后,Visual Studio 将显示一条确认消息。

如果由于合并冲突而停止了合并,Visual Studio 将通知你。 你可以解决冲突,也可以取消合并,返回到合并前状态。

使用 Visual Studio 2019 进行合并

在“团队资源管理器”中,选择“主页”,然后选择“分支”。

在“分支”视图中,右键单击目标分支,然后选择“签出”。

右键单击源分支,选择“合并自”。

验证合并选项,然后单击“合并”。

成功合并后,Visual Studio 将显示一条确认消息。

如果在合并期间出现冲突,Visual Studio 将通知你。 你可以解决冲突,也可以取消合并,返回到合并前状态。

命令行合并

若要将来自一个或多个源分支的提交集成到当前本地分支中,请运行以下 Git merge 命令。 对于多个源分支,请用空格分隔其名称。

git merge <source branch name>

如果在合并期间出现冲突,Git 将通知你。 可以解决冲突,然后运行 git merge --continue ,也可以运行 git merge --abort 以撤消合并并返回到合并前状态。

变基

Git变基对目标分支的提交历史记录进行重新排序,使其包含所有源分支提交,后跟自上次通用提交以来的所有目标分支提交。 另一种查看方法是,Git 变基在源分支历史记录的基础上重播目标分支中的更改。 如果任何源分支更改与任何目标分支更改冲突,则 Git 将提示你解决合并冲突。 Git 变基不会创建合并提交。 值得注意的是,Git 变基会更改现有目标分支提交的顺序,而其他合并策略的情况并非如此。 在上图中,提交 K' 包含与 K 相同的更改,但具有新的提交 ID,因为它链接回提交 E 而不是 C。

Git 变基仅修改目标分支,源分支保持不变。 遇到一个或多个合并冲突时,必须解决这些冲突才能完成变基。 或者,可以取消变基操作,并将目标分支返回到其以前的状态。

如果你是处理功能或 bug 修复分支的唯一人员,请考虑使用 Git 变基将新的 main 分支提交集成到其中。 否则,请使用 Git 合并。

使用 Visual Studio 2022 进行变基

选择“Git”>“管理分支”以打开“Git 存储库”窗口。

在“Git 存储库”窗口中,右键单击目标分支并选择“签出”。

右键单击源分支,选择“将 变基到 上”。

成功变基后,Visual Studio 将显示一条确认消息。

如果由于合并冲突而停止了变基,Visual Studio 将通知你。 可以解决冲突,也可以取消变基并返回到变基前状态。

使用 Visual Studio 2019 进行变基

在“团队资源管理器”中,选择“主页”,然后选择“分支”。

在“分支”视图中,右键单击目标分支,然后选择“签出”。

右键单击源分支,选择“变基到”。

验证变基选项,然后单击“变基”。

成功变基后,Visual Studio 将显示一条确认消息。

如果在变基期间出现冲突,Visual Studio 将通知你。 可以解决冲突,也可以取消变基并返回到变基前状态。

命令行变基

若要将来自源分支的提交集成到目标分支中,请运行 Gitrebase命令:

git rebase <source branch name> <target branch name>

如果当前本地分支是目标分支,则可以将 Git rebase 命令简化为:

git rebase <source branch name>

如果在变基期间出现冲突,Git 将通知你。 可以解决冲突,然后运行 git rebase --continue ,也可以运行 git rebase --abort 以撤消变基并返回到变基前状态。

下载更改并通过拉取更新分支

默认情况下,Git 拉取将 Git提取和 Git合并相结合,以从其远程分支更新当前本地分支。 (可选)Git 拉取可以执行 Git变基而不是 Git 合并。

与 Git 提取不同,Git 拉取将在从远程存储库下载新提交后立即更新当前本地分支。 如果知道要在进行 Git 提取后立即更新当前本地分支,请使用 Git 拉取。

使用 Visual Studio 2022 进行拉取

在“Git 更改”窗口中,选择“拉取”。

还可以从“Git”菜单中选择“拉取”。

拉取操作完成后,将显示一条确认消息。

如果在拉取操作的合并部分发生冲突,Visual Studio 将通知你。 你可以解决冲突,也可以取消合并,返回到合并前状态。

使用 Visual Studio 2019 进行拉取

在“团队资源管理器”中,选择“主页”,然后选择“同步”以打开“同步”视图。

在“同步”视图中,选择“拉取”。 两个“拉取”按钮执行相同的操作。

拉取操作完成后,Visual Studio 将显示一条确认消息。

如果在拉取操作的合并部分发生冲突,Visual Studio 将通知你。 你可以解决冲突,也可以取消合并,返回到合并前状态。

命令行拉取

若要使用提取并将来自远程分支的提交集成到当前工作分支,请运行 Git pull 命令:

git pull <remote repo> <remote branch name>

如果远程存储库具有与当前工作分支同名的分支,则可以将 Git pull 命令简化为:

git pull <remote repo>

当你克隆远程存储库时,Git 将别名 origin 指定为克隆的远程存储库的 URL 的简写形式。 运行 git remote -v 以检查 origin 别名值。 要手动添加 origin 别名,请运行 git remote add origin 。 使用 origin 别名,可以将 Git pull 命令进一步简化为:

git pull

若要使用变基策略将来自远程分支的提交集成到当前工作分支中,请运行带有 --rebase 标志的 Git pull 命令。

如果在 Git 拉取操作的合并/变基部分发生冲突,Git 将通知你。 然后,你可以解决冲突,然后运行 git merge --continue 或 git rebase --continue ,或者运行 git merge --abort 或 git rebase --abort 以撤消合并/变基。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号