remote
git remote add origin [email protected]:abc/def.git
将本地git目录关联远程origin仓库 origin只是url的别名
git remote 查看远程仓库 -v
git remote show [remote] 显示某个远程仓库的信息
git remote rename a b
branch
git branch 列出所有分支 -a本地和远程分支 远程分支根据的是.git/refs/remotes
-v每个分支的最后一次提交 -vv列出当前关联的远程分支
--merged已合并到当前分支的分支 --no-merged未合并到当前分支的分支
git branch --set-upstream-to=origin/dev dev trace到远程分支,
即设置 branch.<branchname>.remote 和 branch.<branchname>.merge
git branch dev [start-point] 创建dev分支 [指向start-point提交] [origin/dev 并与远程dev关联]
git branch -d dev 删除dev分支 -D 强行删除未合并过的分支
git branch -m old new 重命名分支 -M 已存在同名分支时,强制重命名
merge
git merge dev 将dev分支合并到当前分支 clean状态下才能合并 需解决冲突 --abort终止合并
git merge --no-ff -m "blabla.." 禁用fast-forward模式,并commit
pull <remote> <remote_branch> : <local_branch>
1. pull origin master 省略<local_branch>,则pull到当前分支
2. pull origin 省略<remote_branch>,要合并的分支由 branch.<branchname>.merge 给出
3. pull 不带参数执行pull,
1) 若当前分支设置了<remote>,即配置了branch.<branchname>.remote=abc,
相当于执行git pull abc,否则相当于执行git pull origin
2) 要获取的<remote>的url由配置项 remote.<remote>.url 给出
3) 若配置了remote.<remote>.fetch 表达式,则由该表达式执行获取操作
4) 若配置了branch.<branchname>.merge,则合并该分支,否则报错
push <remote> <local_branch> : <remote_branch> 远程分支不存在则创建
1. push 不带参数执行push,
1) 若当前分支设置了<remote>,即配置了branch.<branchname>.remote=abc,
相当于执行git push abc,否则相当于执行git push origin
2) 要推送的<remote>的url由配置项 remote.<remote>.pushurl 给出,
若没配置,则由 remote.<remote>.url 给出
3) 若配置了remote.<remote>.push 表达式,则由该表达式执行推送操作
否则使用“:”表达式,即推送所有在远程版本库中有同名分支的本地分支
省略远程分支名则push到trace的分支 push origin dev
省略本地分支名 push origin :dev 表示删除远程分支
等同于 push origin --delete dev 或 branch -dr [origin/dev]
--force 即使有冲突也强行push --all push所有分支
本地修改基于远程旧版本 不能push
其他
本地有origin/master等指针,指向最后一次连接远程仓库时,远程仓库的状态
git clone 会自动以origin来代表远程仓库 并设置本地master分支跟踪远程master分支
git fetch [remote] 抓取远程仓库的所有变动,包括所有分支 但不merge
远程的改动存放在.git/refs/remotes/下的引用指向的对象里
pull和push包含commit历史