git init 会不会清空_Git命令:git pull amp; git fetch
前言
本地倉庫需要獲取遠程倉庫中的更新,需要用到Git命令pull或fetch,這兩個命令在實際使用時有何區別,下面詳細介紹下。
使用工具
- Git v2.29.2.2
- TortoiseGit v2.4.0.2
pull 和 fetch 區別
git分為本地倉庫和遠程倉庫,本地的git文件夾中存儲了本地倉庫分支的commit ID和跟蹤的遠程倉庫分支的commit ID
- .git/refs/head/[本地分支]
- .git/refs/remotes/[跟蹤的分支]
兩個命令的區別如下:
- git fetch 只更新跟蹤的遠程倉庫分支commit ID,本地倉庫分支的commit ID保持不變,需要合并(merge)跟蹤的遠程倉庫中的更新到本地倉庫;
- git pull 更新所有倉庫的commit ID;
git pull = git fetch + git merge ?下面實際測試驗證這個等式是否成立。
測試用例
兩個本地倉庫GitTest-1和GitTest-2,兩個本地倉庫對同一文件進行修改,GitTest-1提交修改并推送到遠程倉庫中,GitTest-2需要獲取遠程倉庫中的更新,并且解決文件更新沖突
pull測試
- GitTest-1更改文件change2.txt提交并推送,GitTest-2更改文件change2.txt
2. GitTest-2拉取(git pull)遠程更新,得到以下錯誤
3. GitTest-2根據提示儲藏本地修改(stash save),本地的全部改動保存到臨時倉庫,并撤銷了本地的所有改動
4. GitTest-2再次拉取遠程更新,因為本地修改已保存,不會報錯,這個時候GitTest-2的本地倉庫與遠程倉庫的代碼保持一致,而臨時倉庫中的改動還需要更新,因此操作還要繼續
5. GitTest-2合并臨時倉庫中的本地修改(stash pop/apply)到本地倉庫,檢查臨時倉庫和本地倉庫是否有沖突,提示沖突然后手動解決,兩個合并命令的區別如下:
- stash pop 會清空stash list
- stash apply 不會清空stask list
6. GitTest-2提交并推送本地修改,至此兩個本地倉庫代碼與遠程倉庫保持一致
fetch測試
- 與之前一致,首先GitTest-1更改文件change2.txt提交并推送,GitTest-2更改文件change2.txt
2. GitTest-2 fetch遠程更新,更新了跟蹤的遠程倉庫(origin/master),本地倉庫(master)未更新
3. GitTest-2合并本地倉庫的修改到跟蹤的遠程倉庫(git merge FETCH_HEAD)
4. GitTest-2提交并推送更新到遠程倉庫
測試總結
從結果上來看,git pull = git fetch + git merge是成立的,不過過程卻不同,尤其是本地倉庫的更新方式。
總結
以上是生活随笔為你收集整理的git init 会不会清空_Git命令:git pull amp; git fetch的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 雪是谁写的呢?
- 下一篇: data的值 如何初始化vue_vue