Git pull命令與fetch命令的區別
今天在公司碰到個問題,公司不使用master分支作為主分支,而使用release分支作為主分支,這就碰到了個問題,也就是當clone一個項目下來的時候,如果master跟release分支有沖突,就不能pull了,自己還要解決沖突。
剛下一個項目,也不懂沖突到底怎么回事,也就很難搞了。
這個時候,就不得不提Git的兩個命令,git fetch和git pull
Git中從遠程的分支獲取最新的版本到本地有這樣2個命令:
Git fetch
git fetch:相當于是從遠程獲取最新版本到本地,不會自動merge
1
2
3
|
git fetch origin master git log -p master..origin /master git merge origin /master |
以上命令的含義:
首先從遠程的origin的master主分支下載最新的版本到origin/master分支上
然后比較本地的master分支和origin/master分支的差別
最后進行合并
上述過程其實可以用以下更清晰的方式來進行:
1
2
3
4
5
|
# 將遠程release分支拉到本地的releaselocal分支 git fetch origin releaser:releaselocal # 切換到tmp分支 git checkout releaselocal |
這樣也就解決了這個問題,之后master分支刪除掉,直接從releaselocal創建master分支,這樣所有的分支都跟遠端的release分支同步了。
Git pull
git pull:相當于是從遠程獲取最新版本并merge到本地
1
|
git pull origin release:release |
上述命令其實相當于git fetch 和 git merge
這個命令其實不太靠譜,如果本地沒有release分支的話,會自動根據當前分支branch一個release分支,然后來執行pull操作,所以不太靠譜
所以我通常的做法是保留本地的master分支不進行任何commit,然后通過master分支來進行切換,這樣在master分支上是clean的,然后通過之前的命令就不產生沖突了
之后在release分支上進行merge操作,安全很多。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
原文鏈接:http://blog.csdn.net/ethanwhite/article/details/50543133