0
点赞
收藏
分享

微信扫一扫

Git-分支管理

产品喵dandan米娜 2022-04-14 阅读 212
git

分支管理

1 创建与合并分支(这里以 master 为例)

最开始 master 分支只是一条线,Git用 master 指向最新的提交,再用 HEAD 指向 master 。就能确定当前分支以及当前分支的提交点了。

image-20220409171302870

每次提交 master 都会向前走一步, master 这个分支的线也会越来越长。

当我们创建新的分支的时候,例如 dev 时,Git创建一个新的指针叫 dev ,指向 master 相同的提交, 再把 HEAD 指向 dev ,这就表示当前分支在 dev 上。

image-20220409171556046

接下来,对工作区的修改和提交就是针对 dev 分支了,比如新提交一次后, dev 指针向前走一步,但是 master 指针不变:

image-20220409171734897

当我们在 dev 上完成工作后,通过直接吧 master 指针指向 dev 的当前提交就可以完成 devmaster 分支的合并了。

image-20220409171942012

接下来进行实战:

  • 创建 dev 分支,并切换到该分支。

    $ git checkout -b dev
    Switched to a new branch 'dev'
    

    git checkout 命令加上 -b 参数表示创建并切换,相当于以下两条命令:

    $ git branch dev
    $ git checkout dev
    Switched to branch 'dev'
    
  • 查看当前分支

    $ git branch
    * dev
      main
    
  • 修改文件,然后提交

    $ git add readme.txt 
    $ git commit -m "branch test"
    
  • 然后切换回 main 分支,发现刚刚的修改不见了。

image-20220409172639033

  • 进行分支合并

    $ git merge dev
    Updating a3158c5..b6ea9c3
    Fast-forward
     readme.txt | 3 ++-
     1 file changed, 2 insertions(+), 1 deletion(-)
    

    git merge 命令用于合并指定的分支到当前分支。合并后,文件就会相同了。

    注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。当然不是每次合并都能 Fast-forward

  • 合并完成后,就可以删除分支啦

    $ git branch -d dev
    Deleted branch dev (was b6ea9c3).
    
  • switch

    我们这里使用了 git checkout <branch> 来切换分支,前面讲过的撤销修改则是 git checkout -- <file> ,相同的命令不同的用法有些模糊。最新版本的Git提供了 git switch 命令用来切换分支。

    创建并切换到新的 dev 分支,可以使用:

    $ git switch -c dev
    

    直接切换到已有的master分支,可以使用:

    $ git switch main
    

2 解决冲突

当我们在不同分支对同一个文件进行修改而进行合并的时候,这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突。

image-20220409174157857

准备新的分支,然后修改 readme.txt, 然后提交。

$ git switch -c feature1

切换回 main 分支,然后再修改 readme.txt 的同一行,然后提交。

我们尝试合并:

$ git merge feature1
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.

这是 git status 也会显示冲突。我们这时候查看 readme.txt 文件。

Git用<<<<<<<=======>>>>>>>标记出不同分支的内容,我们将冲突内存删除,保存,然后进行提交。

$ git add readme.txt
$ git commit -m "conflict fixed"
[main a70aa75] conflict fixed

image-20220409175803838

用带参数的git log也可以看到分支的合并情况:

$ git log --graph --pretty=oneline --abbrev-commit
*   a70aa75 (HEAD -> main) conflict fixed
|\
| * c28d724 (feature1) feature
* | b33a7d9 main
* | f2edd24 & simple
|/
* 68e9b13 AND simple
* b6ea9c3 branch test
* a3158c5 (origin/main) remove test.txt
* f57c096 add test.txt
* dfed0cf git tracks changes
* 65b2fa1 append GPL
* 6cd35de 修改readme
* b2fe4ff wrote a readme file

git log --graph 可以查看分支合并图。




引用

廖雪峰的官方网站

举报

相关推荐

0 条评论