Git使用(二)分支 合并 冲突解决 远程分支操作 变基

创建分支

$ git branch newBranch
Git有个名为 HEAD 的特殊指针,它的指向分支就是当前分支。
创建分支后它并不会移动到新分支,需要我们手动移动。或者加-b参数
$ git checkout newBranch
查看当前分支指向对象:
git log --oneline --decorate --graph --all
在这里插入图片描述
我们在newBranch分支新创建一个文件:
在这里插入图片描述
这时树变成了这样:
在这里插入图片描述

合并

如果我们想要合并后的分支为master分支:执行以下命令
git checkout master
git merge newBranch

在这里插入图片描述
以上图为例子的合并,master为newBranch的祖先,所以master只需往newBranch移动:
在这里插入图片描述
那如果没合并之前master分支也修改了内容呢:
在这里插入图片描述
同样命令合并后:(把3、4、5数据进行比对连接合并成6)
在这里插入图片描述

冲突

在上面最后一种合并的情况,很有可能master的修改和newBranch的修改都在同一个位置,这就会造成冲突,当我们在执行merge命令时Git就会暂停,让我们去解决冲突

96916@DESKTOP-D7SKL2J MINGW64 ~/Desktop/GitReview/solution (master)
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

执行合并命令冲突后可以用git status查看冲突内容:

96916@DESKTOP-D7SKL2J MINGW64 ~/Desktop/GitReview/solution (master|MERGING)
$ git status
On branch master
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)
        both modified:   test.txt

no changes added to commit (use "git add" and/or "git commit -a")

96916@DESKTOP-D7SKL2J MINGW64 ~/Desktop/GitReview/solution (master|MERGING)

这时候查看test.txt
在这里插入图片描述
可以看到差异
解决过程:

  1. vim test.txt
  2. 然后去掉
<<<<<HEAD
=======
<<<<<newBranch
  1. 按自己想法修改
  2. git add test.txt
  3. git commit -m "merge complete!"

远程分支操作

为避免每次连接远程仓库都需要输入用户名密码,我们可以进行全局配置:git config --global credential.helper cache,之后只需几分钟之内就可以为我们保存用户信息

克隆仓库:

96916@DESKTOP-D7SKL2J MINGW64 ~/Desktop/GitReview (master)
$ git clone https://github.com/HLZ278/GitTest.git

进入克隆到的仓库目录下,查看分支:
在这里插入图片描述
我们发现有orgin/master分支,这个分支就是远程仓库上的master分支,origin/没有特殊含义,Git的克隆会自动帮我们命名,只不过是为了区分远程仓库的master的分支,而且我们还发现,git还会自动创建本地master分支指向远程分支所指向的版本。而且我们当前也在master分支上。

那我们在本地提交个新文件试试:
在这里插入图片描述
我们发现只是移动了本地master分支,而对于远程的master分支并不会移动,也就是说,只要我们拉取或者克隆之后,本地仓库就是我们和远程仓库通信的最后状态。如果这时候有人在远程仓库修改了某些内容,我们也不会知道。除非你重新拉取远程仓库(拉取只会拉取不一样的数据)git fetch <remote>,拉取后我们可以进行合并等操作。画个图:

在这里插入图片描述
上图表示我们克隆远程仓库后在本地提交更新一次
如果这时有人在远程仓库操作了
那我们是不会知道的
我们要fetch新数据下来:

在这里插入图片描述

那本地修改新数据后又怎么从新提交到远程仓库呢?
只需运行git push <remote> <branch>

变基

变基前:
在这里插入图片描述
执行git rebase master newBranch变基后:
在这里插入图片描述

一句话:对比当前分支相对于该祖先的历次提交,提取相应的修改并存为临时文件, 然后将当前分支指向目标基底 C3, 最后依次将之前另存为临时文件的修改依序应用。
变基用法需要注意,看官方文档:https://www.git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%8F%98%E5%9F%BA

其他分支管理命令
查看当前分支以及版本位置:
git branch -v
查看已经合并分支
git branch --merged
查看未合并分支
git branch --no-merged
在某个分支位置创建分支
git checkout -b 新分支 已有分支
删除远程仓库上的分支:
git push <remote> --delete <远程分支>

发布了16 篇原创文章 · 获赞 0 · 访问量 249

猜你喜欢

转载自blog.csdn.net/weixin_43860530/article/details/105393656