git pull 與 git push 區別
結論先行:
1、git pull = git fetch + git merge
2、git fetch 只會將本地庫所關聯的遠程庫commit ID 更新到最新
3、git pull 將本地庫所關聯的遠程庫commit ID 更新到最新的同時,還自動合併了遠程倉庫的代碼(衝突另外說)
白菜實驗一:
人物:小白與小菜
前提:協同開發,關聯同一個遠程倉庫,本地版本相同
假設:小白添加一個25M的 文件後提交併推送到遠程倉庫
小菜在本地執行 git fetch
執行 git diff / git reflog / git log 結果無差異
執行 git status 提示落後遠程倉庫一個版本
查看並比較 小白與小菜 的文件夾屬性
小白的文件夾明顯比小菜的文件夾多了 25M
此時,在本地看不到任何區別,只是知道落後於遠程倉庫多少個版本
(可以推出: git fetch 只會將本地庫所關聯的遠程庫commit ID 更新至最新)
緊接着,小菜在本地執行 git merge
執行 git diff / git status 沒有區別
執行 git reflog / git log 看到了版本升級了
查看並比較 小白與小菜 的文件夾屬性
兩人項目大小差不多,文件基本一樣
(可以推出:git merge 纔會把文件合並過來,此時才修改本地庫代碼)
白菜實驗二:
人物:小白與小菜
前提:協同開發,關聯同一個遠程倉庫,本地版本相同
假設:小白添加一個25M的文件後提交併推送到遠程倉庫
小菜在本地執行 git pull
執行 git diff / git status 結果無差異
執行 git reflog / git log 看到了版本升級了
查看並比較 小白與小菜 的文件夾屬性
兩人項目大小差不多,文件基本一樣
(可以推出:git pull 將本地庫所關聯的遠程庫commit ID 更新到最新的同時,還自動合併了遠程倉庫的代碼)
(比較兩個實驗可以發現:git pull = git fetch + git merge)
知識發現:
1、git status 中的一個功能是 比較 本地庫commit ID 與 本地庫所關聯的遠程庫commit ID 的關係
2、解決衝突後,執行 git diff 無法查看修改了什麼,是由於有兩個上級導致的
3、誰先在工作區,發生衝突後去解決衝突時,誰就在衝突分割符(=====)的上面
渴望力量:
1、不足之處,望各位小夥伴可以多多指出
2、疑問之處,可以私聊,很開心能一起探討