通常我们从github等远程版本库克隆一个全新的代码库,使用
git clone username@xxx:/xxx/xxx.git
默认的克隆下来是master分支,没有其他分支
我们可以使用git branch -a
查看所有分支,包括本地和远程的
(如果是只查看本地分支,使用git branch
命令,只查看远程分支,使用git branch -r
命令)
在团队合作开发中,我们往往需要创建多个分支,各自在不同的分支上开发,然后再归并代码
建立远程分支
如果是团队管理者首先创建好分支,供团队成员使用
也就是本地给远程创建分支
可以直接先创建一个本地分支,假设分支名为dev
git branch dev
然后把本地dev分支提交到远程仓库
git push origin dev
接下来查看远程分支
git branch -a
远程分支创建好之后就是团队成员在各自分支上开发了
切换到远程分支并合并其他分支
首先在开发前,用git branch -a
查看远程分支,然后切换到 origin/dev远程分支,并在本地新建分支 dev
git checkout -b dev origin/dev
同时建立了本地dev分支和远程dev分支的联系
然后在本地dev的分支上开发,开发完后push到远程分支上(省略了add commit这些操作)
git push origin dev
现在比如要合并其他人的代码分支,如dev2,可以
(在本地创建分支,然后拉取dev2的代码)
git checkout master
git branch dev2
git checkout dev2
git pull origin dev2
git add .
git commit -m "合并分支"
并不建议这种操作,因为是强行push了一个本地分支dev2到线上,并是不友好的关联
或者
(直接拉取一个与远程分支关联的本地分支)
git checkout -b dev2 origin/dev2
然后切换回dev分支,如果线上dev2分支有改动,合并线上分支dev2的代码
git checkout dev2
git pull origin dev2
git checkout dev
git merge dev2
如果是更新dev的代码到dev2
git checkout dev
git pull origin dev
git checkout dev2
git merge dev
创建本地分支并更新到线上
git branch dev3
git push origin dev3
git fetch
如果我们拉取线上分支并与本地分支做对比,确认无误后再合并代码,可以使用
git fetch origin master:tmp
git diff tmp
git merge tmp
上面代码也就是先从master上拉取了tmp的一个本地分支,然后查看tmp分支跟本地已有分支的改动,再合并tmp分支
类似于git pull 从远程获取最新版本并merge到本地
git pull origin master
如果线上临时创建了分支,需要查看远程分支的情况
也可以使用git fetch
把远程服务器上所有的更新都拉取下来
然后在本地使用git branch -a
查看所有分支
删除分支
删除本地分支
git branch -r dev3
使用大写的D 强制删除,在有代码改动未提交的情况下删除该分支
git branch -D dev3
删除远程分支
git branch -r -d origin/dev3
git push origin :dev3
不提交commit切换分支
当我们同时开发两个功能块,用到两个分支的时候,可能需要随时切换
而当前分支有改动,没有开发完的前提下,不想提交代码进行commit的操作,切换分支会失败
如果开发完进行commit操作,也会将提交的改动带到另一分支,造成混乱
这种情况下,最好的解决办法就是在当前分支上执行git stash
命令,将当前分支存起来
执行后可以进行git status
验证,看是否存储成功
接着就可以在主分支master上创建并切换到新的分支去开发另一个功能了,在新分支上的功能开发完成后,我们再切换回上一个分支
用git stash list
命令去查看我们“存储”的列表
然后用git stash pop
命令恢复最近存储的列表,恢复的同时把 stash 存储列表的内容也删了
本地回滚
是指已经commit存储到了本地仓库,但未push到远程
git reset --hard 22f8aae
22f8aae为commit的版本号,可以用git lig
查看
远程回滚
可以参考博客
bug fix
使用git的pull时报refusing to merge unrelated histories,push时报Push rejected: Push to origin/master was rejected
使用如下命令进行pull操作
git pull [你的远程仓库的地址] [要拉取的分支名] --allow-unrelated-histories
如
git pull git@github.com:lulujianglab/react-router-demo.git master --allow-unrelated-histories