git多分支创建与代码合并

通常我们从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