首先来过一下
git pull
与git push
的用法,了解过后,最后还是推荐每次pull、push时都把内容写全,省去不必要的麻烦。
git pull
1. 基本用法
- git pull <远程主机名> <远程分支名>:<本地分支名>
-
git pull origin master:wt
,就是将远程主机origin上的master分支拉取过来,并与本地的wt分支合并; - 如果后面的冒号省略的话,即
git pull origin master
,表示将远程主机origin上的master分支拉取过来,并与本地的当前所在分支合并;
git push
1.基本用法
- git push <远程主机名> <本地分支名>:<远程分支名>
-
git push origin wt
,如果远程分支被省略,则表示将本地分支推送到与之存在映射关系的远程分支,如果不存在映射关系的远程分支,则会被新建一个与本地分支同名的远程分支;(所以当你想要推送的远程分支feature与本地分支wt不同名且不存在映射关系,请一定写全!!!!!) -
git push origin :feature
,如果冒号前的本地分支省略,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支,等同于git push origin --delete feature
,所以这种形式慎用!!!! -
git push origin
,如果当前本地分支与远程分支存在映射关系,则本地分支与远程分支都可以省略,即将当前分支推送到origin主机的对应分支;(记住~~仅限于存在映射关系,你才可以省略!!!!) -
git push
,当前本地分支只有一个远程分支(也就是说只有一个远程主机),那么它连主机名都可以省略;
下面结合情形来记录分支
- 你clone了一个新代码,记住git clone的时候只会把远程上的master分支clone下来,无法clone所有分支;
- 但远程上一共有master、dev、test三个分支,一般你需要把写的代码提到dev分支上,这时你
git checkout dev
,git会自动地生成一个本地的分支指针,相当于执行git checkout -b dev origin/dev
(貌似这里仅适用于本地分支与远程分支同名的情况下,意思为切换到远端的dev分支,并在本地新建dev分支,且切换到本地dev分支); - 此时,如果你不想本地与远程同名,那么你可以直接在本地新建分支
git checkout -b wt
,此时wt分支的代码就与dev分支上的保持一致(你在哪个分支下新建分支,新建分支的代码就与那个分支下的代码保持一致); -
直接新建的本地的分支(
git checkout -b XX
这种只新建了本地分支)是不会自动和远程同步的(即映射);查看是否当前分支是否有映射分支,执行git branch -vv
,括号中的蓝色字体就是映射得远程分支,如果没有,那就是没有映射的远程分支; - 如果本地分支没有与远程分支映射,那么你在git pull或push的时候,要把所有内容都写全,即
git pull <远端主机名> <远端分支>:<本地分支>
(git pull origin feature:wt
)和git push <远程主机名> <本地分支名>:<远程分支名>
(git push origin wt:feature
); - 如果你想把本地分支与远程分支映射起来,先切换到要映射的本地分支上,执行
git branch --set-upstream-to <远程主机名>/<远程分支>
(git branch --set-upstream-to origin/dev
),关联之后呢,可以运行git branch -vv
查看映射关系,成功后每次只需写git pull
、git push
即可,就不需要加其他内容了; - 下面说一下合并代码的步骤(请一直保持本地分支与你要合并到的分支上版本一致)
// 此时在本地分支wt上,相关功能都写在此分支上,写完提交到本地仓库
git add .
git commit -m "message"
// 把本地分支wt上的内容合并到远程分支dev
git checkout dev
git pull // 更新一下dev最新的代码
git merge wt //把wt分支上的内容合并到当前分支dev
git push
//这时你又要切到wt分支上继续写
git checkout wt //这时你可以git merge dev一下,使本地wt分支与dev分支代码一致,也可以不merge,wt本地分支只保留我自己的改动
- 最后wt分支上的代码合到远程dev上后,可以把本地分支wt删掉,
git branch -d wt
(因为wt这个分支只在本地啊,没有推到远程仓库,所以可以删除,当然在此分支上的改动都提交后删除,你也可以不提改动,直接强制删除,git branch -D wt
)
解决冲突
- 当你准备把你本地的分支合并出现冲突时,你要分清什么是“当前更改”和“传入的更改”;
- “本地更改”(
<<<<<<<
)就是你git pull从远端拉下来的代码; - “传入的更改”(
>>>>>>>
)就是你git commit要上传的代码;
冲突.png
关于分支的git命令
-
git branch
查看本地分支; -
git branch -r
查看远端分支; -
git branch -a
查看所有的分支,包括本地和远端的; -
git branch -vv
查看本地分支的映射信息; -
git branch --unset-upstream
撤销本地分支与远程分支的映射关系; -
git checkout -b XX origin/dev
切换到远程分支dev,并新建本地分支XX且切换至XX分支上(这样子新建的分支会与远程分支有映射关系);
image.png -
git branch -d XX
删除XX本地分支; - 如果远端有
dev
这个分支,在本地直接git checkout dev
(分支名字一样),这时会自动在本地创建dev
这个分支且与远端dev
相关联(与第7条有点像啊,只是名字是否相同的区别);