远程仓库操作
指令 | 解释 |
---|---|
git remote add origin <ssh> | 将远程仓库关联到本地版本库,并将origin 作为远程库的名字 |
git clone <ssh> | 直接将远程仓库克隆到本地 |
git remote rm origin | 删除origin 代表的远程库(只是解除了关联,并不是真正的删除远程库),可以提前使用git remote -v 来查看远程库的信息 |
git remote rename <name1> <name2> | 远程仓库重命名 |
push命令
git push
时使用本地分支来更新远程分支,基本形式是——
git push <远程仓库名> <本地分支名>:<远程分支名>
本地分支名为要被推送的分支,远程分支名是远程仓库中要被更新的分支。该指令有以下几种使用方法——
指令 | 解释 |
---|---|
git push origin master:master | 使用完整性形式,表示用本地master分支来更新远程仓库origin的master分支 |
git push origin master | 省略了远程分支名,表示将本地master本支推送到origin的master分支,如果后者不存在,则会被新建 |
git push -u origin master | 作用同git push origin master ,同时指定origin为默认远程仓库,以后就可以直接使用git push 而不用带其他参数了 |
git push origin :master | 省略了本地分支名,表示用空分支来跟新origin的master分支,其实是删除了远程origin的master分支。该指令相当于git push origin --delete master |
git push origin | 省略了远程分支名和本地分支名,只有在当前分支(HEAD指向的分支)和远程仓库中某分支存在追踪关系的时候才可以使用(一般是分支名相同) |
git push | 不带任何参数,默认只推送当前分支到默认远程仓库 |
git push --all origin | 将所有的本地分支都推送到origin远程仓库 |
git push --force origin | 如果远程仓库的版本比本地新,git会报错,如果一定要推送,则可以使用该指令强制推送 |
pull命令
git pull
表示将远程仓库中某分支下拉并合并到本地某分支,指令基本形式是——
git push <远程仓库名> <远程分支名>:<本地分支名>
该指令有以下几种使用方法——
指令 | 解释 |
---|---|
git pull origin master:master | 使用完整性形式,表示将远程仓库origin的master分支下拉并合并到本地master分支上 |
git pull origin master | 省略了远程分支名,表示将远程仓库origin的master分支下拉并合并到当前分支上(HEAD指向的分支) |
常见问题及解决方式
情景1:
假设你刚刚在master
分支上干完一部分工作,commit到本地仓库后正准备上传到远程仓库,结果使用push
是竟然报错了。原因是和你在同一分支上工作的大兄弟早早的干完活push上去了,而他的最新提交和你的提交是有冲突的。
解决方法:
先git pull origin master:master
把最新的origin/master
下并合并到本地master
,当然此时会提示“合并有冲突”。我们手动解决冲突后再次commit,这时push就没有什么问题了。
情景2:
假设你对master
进行了版本回退,在该回退版本上修改了一些问题后想要上传到远程分支,结果发现直接push也有问题。此时不可以先pull在push,因为pull之后代码就和远程仓库一样了。
解决方法:
我们可以先使用git branch a
新建一个分支a,然后回到版本回退前的最新一次commit,使用git merge a
即可将该修改合并到最新的分支。
情景3:
假设你正在master
分支上工作,并已经对master
分支上的内容进行了修改。此时你的同事已经将他的修改上传到远程仓库里,而你想将他的修改和你的修改合并在一起,如果此时直接pull也会出现错误。
解决方法:
先用git stash
将本地的修改暂存,然后git pull
拉取同事修改后的版本,最后git stash pop
将自己的修改恢复。此时可能会有冲突,需要手动进行解决。