git分支管理及冲突解决

好脑筋不如烂笔头 2016-04-20

一、分支管理

 

1,查看当前分支所在

 git branch

 

2,切换到(已经存在的)指定分支

git checkout <已存在的分支名称>

 

注:如果本地暂存区内有内容(即,你运行过git add命令,或者使用git status查看,存在绿色文件),则会切换失败,需要提交暂存区内容或者将暂存区内容丢弃,才能切换。

 

3,以本地当前分支为起点,创建新分支

git branch <要创建的新分支名称>

 

注:也有可能创建失败,理由同切换分支功能。

 

4,以本地当前分支为起点,创建新分支并切换到新分支

git checkout -b <要创建并切换的新分支名称>

其实这个命令是一个组合命令:

(1)git branch <要创建的新分支名称>

(2)git checkout <已存在的分支名称>

 

5,以远程仓库的远程分支为起点,创建新分支并切换到新分支

git checkout -b <要创建并切换的新分支名称>  <远程仓库名称>/<远程分支名称>

 

例如:

git checkout -b develop origin/develop

第一个develop是要创建的本地分支名称,origin是远程仓库名称,第二个develop是远程分支名称

 

当从远程拉取内容时,直接使用git pull即可,不需要指定远程仓库和分支名称

当从本地向远程推送内容时,直接使用git push即可,不需要指定远程仓库和分支名称

 

可以通过git remote -v列出多个远程仓库的别名和地址

 

6,将本地分支与远程分支设置关联(追踪tracking)

git branch —set-upstream-to=<远程仓库名称>/<远程分支名称> <本地分支名称>

 

例如

git branch —set-upstream-to=origin/develop develop

origin是远程仓库名称,第一个develop是远程分支名称,第二个develop是本地创建的分支名称

 

当从远程拉取内容时,直接使用git pull即可,不需要指定远程仓库和分支名称

当从本地向远程推送内容时,直接使用git push即可,不需要指定远程仓库和分支名称

 

 

7,查看本地分支与远程分支的追踪关系

git branch -vv

 

!注意是两个v

 

8,合并其他分支到当前分支

git merge <需要合并进来的分支名称>

 

9,从远程仓库拉取内容

(1)git fetch <远程仓库名称>

将远程仓库的所有分支的最新修改,全部取回到本地

(2)git fetch <远程仓库名称> <远程分支名称>

将远程仓库指定分支的最新修改,取回到本地

 

 

10,拉取远程仓库的远程分支,并合并到当前分支中

git pull <远程主机名> <远程分支名>:<本地分支名>

 

由于远程分支与本地分支名称相同,则可以简化为

git pull <远程主机名> <远程分支名>

 

当设置了本地分支对应关联的远程分支时,又可以简化为

git pull

 

注:

git pull命令是一个组合命令,相当于

(1)git fetch <远程仓库名称>

(2)git merge  <远程仓库名称>/<远程分支名称>

 

示例:

git pull origin develop:develop

git pull origin develop

git pull

当你设置本地分支和远程分支相同名称,并且设置了关联关系(就是追踪关系tracking),则这三个命令效果相同

 

11,rebase合并

git rebase -i <要合并进来的分支名称>

适用场景

 

使用 git rebase -i HEAD~<次数>进入commit管理模式,根据提示有如下操作

  1. 合并多次提交
  2. 修改提交的commit message 
  3. 删除某个commit,通过commit id

 

rebase中间态可执行的操作

git add <filename>

git rebase —continue

git rebase --abort

 

 

二、冲突解决

1,有可能产生冲突的命令

(1)git merge <需要合并进来的分支名称>

(2)git pull <远程仓库> <远程分支>

(3)git rebase -i <要合并进来的分支名称>

 

2,解决冲突

发生冲突后,使用git status可以查看到冲突文件是红色字体显示的。打开文件,冲突部分会有特定表示如下

<<<<<<< HEAD

冲突发生前,没有进行合并时,当前位置的代码

=======

合并进来的冲突代码

>>>>>>>

 

用户需要根据具体业务删除或者保留对应的代码,同时将<< HEAD == >> 这些标示去掉。

 

注:

有时>>>>>>>后面会跟一些描述信息,比如分支名称、提交时的注释等等。

 

三、替换撤销命令

!!需要谨慎使用的一些命令

1,删除分支

git branch -D <要删除的分支名称> 强制删除,即便没有被合并到主分支

git branch -d <要删除的分支名称> 非强制删除,如果没有被合并到主分支,则无法删除

 

 

2,替换掉工作目录中的某一个文件,放弃对它的所有修改,将该文件更新到最近的一次提交版本

git checkout <文件路径>

注:替换之后,则该文件再也找不回来了,需谨慎使用!

 

3,清除暂存区内的指定文件的暂存内容

git reset HEAD <文件路径>

注:清除之后,则该文件再也找不回来了,需谨慎使用!

 

4,撤销提交到指定的版本

git reset <指定版本编号>

注:撤销后,指定版本之后的所有提交都会被撤销,并回退到当前工作目录,执行git status可以看到,所有已修改的文件都是红色字体显示

 

注:3,4可以使用git reflog查看改动日志

 

四、常用使用场景举例

 

1,日常性工作

(1)工作之前使用git branch查看当前分支,使用git status查看我们工作目录中是否有未提交的修改,使用git diff查看我们都修改了哪些内容

(2)使用git pull或者git fetch 、git merge命令将远程内容拉取到本地,并合并到当前分支中

(3)使用git add将我们的修改添加到暂存区内,使用git commit提交本次修改(注意使用-m添加提交说明)

(4)使用 git status查看是否提交完成

(5)使用git pull拉取远程分支的修改

(6)使用git push推送本次修改

 

2,不能快速解决的任务,或者需要紧急修复的bug

(1)使用git branch查看当前分支

(2)使用git checkout切换到需要紧急修复的分支

(3)使用git checkout -b迁出一个修复分支(例如叫fix)

(4)在fix分支上修复bug,使用git add、git commit提交修改

(5)使用git checkout切换到需要紧急修复的分支,使用git pull拉取远程内容,使用git merge fix合并修改

(6)使用git status查看合并是否产生冲突

(7)使用git push推送修改到远程仓库

 

 

 

 

 

 

相关推荐