1. 程式人生 > >git 如何同步本地、遠端的分支和tag資訊

git 如何同步本地、遠端的分支和tag資訊

git 如何在本地同步遠端分支和tag

1.git如何同步本地分支與遠端origin的分支
問題場景1:
同事A建立了本地分支branchA並push到了遠端->同事B在本地拉取(git fetch)了和遠端branchA同步的本地分支branchA->同事A開發完成將遠端分支branchA刪除(遠端倉庫已經不存在分支branchA)->同事B用git fetch同步遠端分支,git branch -r發現本地仍然記錄有branchA的遠端分支

分析:遠端有新增分支,git fetch可以同步到新的分支到本地,但是遠端有刪除分支,直接"git fetch"是不能將遠端已經不存在的branch等在本地刪除的

解決方法:
git fetch --prune #這樣就可以實現在本地刪除遠端已經不存在的分支
或者簡略:
git fetch -p
git fetch -p origin
git remote prune origin

branch常用的命令:
git branch -a #檢視本地和遠端所有的分支
git branch -r #檢視所有遠端分支
git branch #檢視所有本地分支
git branch -d -r origin/branchA #刪除遠端分支

其他較常用的命令
git fetch #將本地分支與遠端保持同步
git checkout -b 本地分支名x origin/遠端分支名x #拉取遠端分支並同時建立對應的本地分支

問題場景2:
本地分支提示:Git Your branch is ahead of ‘origin/master’ by X commits,你想讓本地直接和遠端保持同步,想讓不再提示這個討厭資訊,那麼如果你本地的commit確保不想要,可以如下操作:
解決方法:
1)git reset --hard origin/master

或者還有一個將原生代碼與伺服器程式碼更新一致的語句
2)git branch -u origin/master

2.git 如何同步本地tag與遠端tag
問題場景:
同事A在本地建立tagA並push同步到了遠端->同事B在本地拉取了遠端tagA(git fetch)->同事A工作需要將遠端標籤tagA刪除->同事B用git fetch同步遠端資訊,git tag後發現本地仍然記錄有tagA

分析:對於遠端repository中已經刪除了的tag,即使使用git fetch --prune,甚至"git fetch --tags"確保下載所有tags,也不會讓其在本地也將其刪除的。而且,似乎git目前也沒有提供一個直接的命令和引數選項可以刪除本地的在遠端已經不存在的tag(我目前是沒找到有關這類tag問題的git命令~~,有知道的同學可以告知我下,互相進步)。
解決方法:

git tag -l | xargs git tag -d #刪除所有本地分支
git fetch origin --prune #從遠端拉取所有資訊

#查詢遠端tags的命令如下:
git ls-remote --tags origin

tag常用git命令:
git tag #列出所有tag
git tag -l v1.* #列出符合條件的tag(篩選作用)
git tag #建立輕量tag(無-m標註資訊)
git tag -a -m ‘first version’ #建立含標註tag
git tag -a f1bb97a(commit id) #為之前提交打tag

git push origin --tags #推送所有本地tag到遠端
git push origin #推送指定本地tag到遠端

git tag -d #刪除本地指定tag
git push origin :refs/tags/ #刪除遠端指定tag

git fetch origin #拉取遠端指定tag
git show #顯示指定tag詳細資訊