远程分支
注意:以下内容是我对"猴子都能懂的Git入门"的总结,来源地址:https://nulab.com/zh-cn/learn/software-development/git-tutorial/ 如果大家想详细学习建议从官方文档学习
远程分支的定义:
虽然Git(分布式版本控制系统)在您的本地计算机上,但您也可以拥有存储库的远程副本。远程存储库可以位于私有中央服务器上,也可以位于同事的计算机上。
你也可以使用版本控制软件,例如 Backlog来托管远程存储库。
你可以检索其他人对存储库所做的更改或将存储库的本地副本移到远程服务器。
拉取远程分支
您可以使用 git pull 命令将远程存储库中的最新更改应用到本地存储库。
例子:
远程分支位于本地分支的上游
在这种情况下,如果我们要将远程分支的合并应用到我们的本地分支,这将是一个快进合并
本地分支中的更改不存在远程分支中
不发生冲突
执行拉取时,会在本地存储库中自动创建合并提交。
发生冲突
:必须解决冲突并手动提交合并
举个例子:
- 初始状态
你和同事克隆了同一个远程仓库,初始文件 app.js 内容:
function main() {
console.log("Hello, world!");
}
2.并行修改:
你:在本地修改 app.js,添加一行代码:
function main() {
console.log("Hello, Git!"); // 修改了这一行
console.log("This is my change.");
}
提交并推送到远程:
git add app.js
git commit -m "Update greeting"
git push origin main
同事:在你推送之前,也修改了 app.js 的同一行:
function main() {
console.log("Hi, Git!"); // 同事修改了同一行
console.log("This is their change.");
}
同事提交并推送到远程:
git add app.js
git commit -m "Update greeting"
git push origin main # 成功,因为同事的提交基于旧版本
3.试图拉取代码:
git pull origin main
结果:合并冲突!因为你们修改了同一行代码:
Auto-merging app.js
CONFLICT (content): Merge conflict in app.js
Automatic merge failed; fix conflicts and then commit the result.
4.查看JS文件:
function main() {
<<<<<<< HEAD
console.log("Hello, Git!"); // 你的修改
=======
console.log("Hi, Git!"); // 同事的修改
>>>>>>> origin/main
console.log("This is my change.");
}
<<<<<<< HEAD:表示你的本地修改。
=======:分隔线。
origin/main:表示远程分支的修改。
5.解决冲突:保留一个或修改,或者手动合并
function main() {
console.log(“Hello and Hi, Git!”); // 手动合并两个修改
console.log(“This is our change.”);
}
6.再次提交
获取远程分支
命令
git fetch命令
定义
在执行拉取并且没有发生冲突时,来自远程的更改会自动合并到当前本地分支.如果你想获取远程修改但不想将他们合并到当前本地分支中,使用git fetch命令
获取将从远程下载本地分支尚不存在的更改.获取FETCH_HEAD ref 将跟踪从远程存储库中获取的更改.
一旦获取FETCH_HEAD合并,修订历史记录将产生与git pull操作相同的结果。拉取是同时执行获取和合并操作。
推送分支到远程
快进合并
将本地分支推送到远程时,目标分支时本地分支的直接祖先
例如: 远程分支: A-B-C
本地分支:A-B-C-D
非快进合并
但是,如果推送导致非快进合并,Git 将拒绝您的推送以防止您覆盖以前的提交。(不然会导致其它团队成员的本地存储库和远程存储库不同).在这种情况下,您必须拉取最新的远程更改并再次推送。