二、远程操作
(一)基础篇
1. git clone
main是本地的main分支,o(origin)/main是表示本地拉去下来的远程的main分支
o/main分支记录了远程仓库拉取时的分支状态
远程分支有一个特别的属性,在你切换到远程分支时,git会自动进入分离 HEAD 状态(这样做是因为git不想让你在本地就能直接进行修改远程仓库代码的操作)
2. git fetch(难点)
从远程仓库获取数据,并将本地仓库中的远程分支更新成远程仓库相应分支最新的状态
git fetch 完成了仅有的但是很重要的两步:
1)从远程仓库下载本地仓库中缺失的提交记录
2)更新保存在本地的远程分支指针( o/main)但是!git fetch 并不会改变你本地仓库指针的状态。它不会更新你的 main 分支,也不会修改你磁盘上的文件,意思是本地仓库此时并没有与远程仓库完全同步!
3. git pull
git fetch + git merge o/main :
本地仓库合并远程仓库
git pull :
可以看出:git pull = git fetch + git merge
同样用于本地仓库合并远程仓库
4. git push
git push
负责将变更上传到指定的远程仓库,并在远程仓库上合并你的新提交记录本地仓库也会将o/main更新为远程仓库的状态
5. 解决远程仓库与本地仓库可能存在的冲突:2种方法
法一 git fetch + git rebase o/main + git push :
先将远程仓库的最新数据更新到本地仓库,再改变本地仓库指针指向节点的基节点(上一个节点),再进行提交
这种做法的核心思想是在本地重新开辟一条和远程仓库一样的分支,再将最新的本地修改嫁接到新分支上,再进行提交,避免冲突
法二 git fetch + git merge o/main + git push :
这种做法同上面rebase的共同点在于,通过在本地仓库解决冲突,然后再提交远程,但是在本地进行的具体git操作有差别
这种做法,直接将远程和本地仓库先进行代码合并,再提交到远程仓库
在实操中,通过idea内置的git解决代码冲突时,更常用到的其实是这种,先pull下来远程代码,然后在本地进行代码合并解决冲突,在push进远程
法一变体 git pull --rebase + git push :
前面已经介绍过
git pull
就是 fetch 和 merge 的简写,类似的git pull --rebase
就是 fetch 和 rebase 的简写!
法二变体 git pull + git push :
实务中最常用的方法!