git remote
-
git remote列出所有已經(jīng)添加的遠端 -
git remote -v順便列出他們的url -
git remote add <name> <url>添加一個新遠端 -
git remote rm <name>移除遠端 -
git remote rename <old-name> <new-name>重命名
git clone會在本地自動創(chuàng)建一個叫做origin的遠端。
git fetch
git中每個人都是一個完整的庫,所以也就不存在svn那種從中央庫拿文件的概念。中央庫沒啥了不起,只不過大家都以這個庫的文件作為基準來進行開發(fā)。所謂的fetch,其實是把當前庫的git狀態(tài)更新到中央庫的狀態(tài),下載所有快照之類的。
-
git fetch <remote>從遠端獲取所有的分支 -
git fetch <remote> <branch>從遠端獲取某個分支
文中多次提到的detached HEAD state,其實是指當前的狀態(tài)脫離了最新的head。最新的head已經(jīng)被儲存下來了,而現(xiàn)在ref被指向其它的某個版本,可以通過
git checkout HEAD來接觸這種狀態(tài)
-
git branch -r可以看到遠端所有的branch
git pull
相當于fetch+merge??梢砸暈椋?/p>
git pull origin
git merge origin/master
-
git pull --rebase <remote>不使用merge,使用rebase
粗略理解merge和rebase的區(qū)別。
merge把別人分支上的東西作為一個merge commit提交到本地的分支上;
rebase維持一個線性的log,把當前的分支的開頭(基)懟到最新的公共分支上。
-
git config --global branch.autosetuprebase always可以設(shè)置把fetch里的操作全部變成rebase
git push
-
git push最普通的用法,安全。在你merge或rebase了線上那條分支之前,push會報錯。 -
git push --force不管有沒有merge,強行push。會把遠端強行變得跟本地一樣,非常危險。 -
git push <remote> --allpush所有分支 -
git push <remote> --tagspush本地所有tag
在push之前一定要pull merge一次。正像你的svn gui,其實每次commit之前都會幫你做一次update操作,以更新本地的數(shù)據(jù)到最新狀態(tài)。
墜吼是只push到bare庫,不要隨便push到到別人庫。