Git 分支和合并
分别到汉语母语中,您只需要一个选项:
开设分支的目的
分岐操作用于同时开发多个功能的分支。
分支的机制
分支就是指向提交的指针。当进行提交时,指向的提交就会移动到最新的提交。
“HEAD” 在中文中的意思是什么?
“HEAD” 指的是当前正在操作的分支。
创建一个新的分支
$ git branch <ブランチ名>
这个命令仅用于创建分支,并不会切换到该分支。
显示分支列表
$ git branch
# リモートリポジトリにあるブランチも表示する
$ git branch -a
带有星号的分支是当前所在的分支。
切换分支
$ git checkout <ブランチ名>
# featureブランチを作って切り替えることを考える
$ git branch feature
$ git checkout feature
# これは以下のコマンドと同じ
$ git checkout -b feature
让我们试着实践一下分支。
创建一个名为 branch_test 的目录并进行第一次提交。
$ mkdir branch_test
$ cd branch_test
$ git init
Initialized empty Git repository in /home/username/branch_test/.git/
$ echo init > init.html
$ git add .
$ git commit -m 'create init.html'
[master (root-commit) c3d069a] create init.html
1 file changed, 1 insertion(+)
create mode 100644 init.html
$ git log --oneline
c3d069a (HEAD -> master, feature) create init.html
创建feature分支。
$ git branch feature
$ git branch
feature
* master
现在,存在着主分支(master)和功能分支(feature),确认了自己在主分支上。
接下来在master分支上创建文件并提交。
$ echo master > master.html
$ git add .
$ git commit -m 'create master.html'
在GitHub上随便创建一个存储库,将这些更改推送上去。
$ git remote add origin <URL>
$ git push origin master
接下来,切换到feature分支并创建新文件,然后进行提交和推送。
$ git checkout feature
Switched to branch 'feature'
$ echo feature > feature.html
$ git add .
$ git commit -m 'create feature.html'
[feature e980fc5] create feature.html
1 file changed, 1 insertion(+)
create mode 100644 feature.html
$ git push origin feature
最后在浏览器上打开GitHub,尝试切换分支。如果发现存在的文件在master和feature分支上有所不同,那就表示成功。
合并是指将两个或多个东西结合在一起形成一个整体的过程或动作。
将其他人的更改内容合并到工作中。具体来说,将两个分支合并为一个分支。
合并的类型
- 快进
- 当分支没有分叉时,一个分支会指向另一个分支。不会创建新的提交。
- 自动合并
- 当分支分叉时,会创建一个新的合并提交。合并提交有两个父提交。
- 冲突
- 当对同一文件的同一行进行不同编辑时等情况发生,无法解决应该优先选择哪个分支的状态。
合并
$ git merge <ブランチ名>
$ git merge <リモート名/ブランチ名>
让我们从实践分支开始继续下去。
# masterブランチに切り替える
$ git checkout master
# マージする
$ git merge feature
# ファイル一覧を見てみる
$ ls
feature.html init.html master.html
我可以确认master.html和feature.html同时存在。
冲突的解决
如果发生冲突,可以使用”git status”命令检查相关文件。打开文件后,会出现以下描述:
<<<<<<< HEAD
~
=============
~
>>>>>>> NEW
HEAD显示当前所在的分支。同时,NEW中输入的是将要合并的分支名称。
通过删除上述的描述并修正为正确的内容,然后提交新的版本,可以解决冲突。
预防冲突的措施
-
- 複数人で同じファイルを変更しない
-
- pullやmergeをする前に、commitやstashをしておく
- プルするときは、現在いるブランチを確認する
更改或删除分支
如果要更改当前分支的名称,
$ git branch -m <新ブランチ名>
若要删除分支,则:
$ git branch -d <ブランチ名>
# 未マージのブランチを強制削除する場合
$ git branch -D <ブランチ名>
分支的实际用途
将主分支保留为发布用,并创建一些主题分支进行开发。