Git
拉取代码的坑
- 格式:
git xx指令 origin/远程仓库分支名称
- 假如本地仓库和远程仓库都是空的
- 本地仓库向远程仓库提交一个文件
git commit -a -m "local first commit"
:-a
暂存修改文件到暂存区,准备本地提交。-m
表示提交信息git push origin refs/heads/master
:将本地master
分支的最新本地提交(refs/heads/master)
推送到远程仓库origin
的同名分支
- 本地仓库向远程仓库提交一个文件
- 本地仓库分支记录
- 远程仓库分支记录
git fetch
从远程仓库获取本地仓库所有尚未拥有的版本更新,只是获取,不会进行远程仓库和本地仓库的代码合并和代码变基,需要手动进行代码合并git merge origin/master
和代码变基git rebase origin/master
- 远程仓库有一笔新的远程提交,本地仓库并没有办法感知
- 本地仓库使用
git fetch
查看远程仓库最新的代码提交- 本地仓库分支记录
- 远程仓库分支记录
- 本地仓库分支记录
git merge origin/master
- 假如本地仓库没有本地提交,本地仓库使用
git merge origin/master
手动合并刚才git fetch
获取到远程仓库的代码更新。此时本地仓库和远程仓库的代码一致
- 本地仓库分支记录
- 远程仓库分支记录
- 本地仓库分支记录
- 假如本地仓库有本地提交,本地仓库使用
git merge origin/master
手动合并刚才git fetch
获取到远程仓库的代码更新,需要在本地仓库解决冲突的代码文件- 本地仓库做一些修改并本地提交
git commit -a -m "local second commit"
,但还没有推送到远程仓库
- 远程仓库做一些修改并远程提交
- 本地仓库使用
git fetch
查看远程仓库最新的代码提交- 本地仓库分支记录
- 远程仓库分支记录
git merge origin/master
手动合并刚才git fetch
获取到远程仓库的代码更新,需要本地解决冲突
- 冲突解决完成后,提交到本地仓库
git commit -a -m "merge local origin commit"
,再推送到远程仓库git push origin refs/heads/master
,本地仓库和远程仓库的代码才会一致,git merge
方式会造成代码提交的分叉和合并 - 本地分支记录
- 远程分支记录
- 本地仓库做一些修改并本地提交
git rebase origin/master
- 假如本地仓库没有本地修改和本地提交,本地仓库使用
git rebase origin/master
手动变基刚才git fetch
获取到远程仓库的代码更新,此时本地仓库和远程仓库的代码一致 - 远程仓库有一笔新的远程提交,本地仓库并没有办法感知
- 本地分支记录
- 远程分支记录
- 本地分支记录
- 假如本地仓库有本地提交,本地仓库使用
git rebase origin/master
手动合并刚才git fetch
获取到远程仓库的代码更新,需要在本地仓库解决冲突的代码文件- 本地仓库做一些修改并本地提交
git commit -a -m "local thid commit"
,但还没有推送到远程仓库
- 远程仓库做一些修改并远程提交
- 本地仓库使用
git fetch
查看远程仓库最新的代码提交-
本地仓库分支记录
-
远程仓库分支记录
-
git rebase origin/master
手动合并刚才git fetch
获取到远程仓库的代码更新,需要本地解决冲突
- 冲突解决完成后,提交到本地仓库的暂存区
git add hello.txt
,再使用git rebase --continue
执行之前被冲突打断的rebase
操作,git
会自动创建一个线性提交,不会像git merge
那样的分叉和合并
- 本地仓库做一些修改并本地提交
总结
git fetch
:从远程仓库获取最新的代码更新,但是不会自动合并或修改你的本地仓库代码git merge
:合并两个分支代码,会出现代码提交的分叉和合并,非线性合并git rebase
:合并两个分支代码,不会出现代码提交的分叉和合并,线性合并git pull
:git fetch + get merge
的组合,用远程仓库代码更新本地仓库的代码,非线性合并git pull --rebase
:git fetch + get rebase
的组合,用远程仓库代码更新本地仓库的代码,线性合并