git remote
-
git remote
列出所有已经添加的远端 -
git remote -v
顺便列出他们的url -
git remote add <name> <url>
添加一个新远端 -
git remote rm <name>
移除远端 -
git remote rename <old-name> <new-name>
重命名
git clone
会在本地自动创建一个叫做origin的远端。
git fetch
git中每个人都是一个完整的库,所以也就不存在svn那种从中央库拿文件的概念。中央库没啥了不起,只不过大家都以这个库的文件作为基准来进行开发。所谓的fetch,其实是把当前库的git状态更新到中央库的状态,下载所有快照之类的。
-
git fetch <remote>
从远端获取所有的分支 -
git fetch <remote> <branch>
从远端获取某个分支
文中多次提到的detached HEAD state,其实是指当前的状态脱离了最新的head。最新的head已经被储存下来了,而现在ref被指向其它的某个版本,可以通过
git checkout HEAD
来接触这种状态
-
git branch -r
可以看到远端所有的branch
git pull
相当于fetch+merge。可以视为:
git pull origin
git merge origin/master
-
git pull --rebase <remote>
不使用merge,使用rebase
粗略理解merge和rebase的区别。
merge把别人分支上的东西作为一个merge commit提交到本地的分支上;
rebase维持一个线性的log,把当前的分支的开头(基)怼到最新的公共分支上。
-
git config --global branch.autosetuprebase always
可以设置把fetch里的操作全部变成rebase
git push
-
git push
最普通的用法,安全。在你merge或rebase了线上那条分支之前,push会报错。 -
git push --force
不管有没有merge,强行push。会把远端强行变得跟本地一样,非常危险。 -
git push <remote> --all
push所有分支 -
git push <remote> --tags
push本地所有tag
在push之前一定要pull merge一次。正像你的svn gui,其实每次commit之前都会帮你做一次update操作,以更新本地的数据到最新状态。
坠吼是只push到bare库,不要随便push到到别人库。