基本操作
查看分支
使用 git branch
查看分支,-a
参数查看所有分支,包括远程的分支:
$ git branch
* master
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
创建分支
使用 git branch <分支名>
创建分支:
$ git branch dev
$ git branch
dev
* master
删除分支
使用 git branch -d <分支名>
删除分支:
$ git branch -d dev
Deleted branch dev (was 9a995da).
$ git branch
* master
重命名分支
使用 git branch move <旧分支名> <新分支名>
重命名分支,它与 linux 中的 mv
命令类似:
$ git branch -m dev dev_1
$ git branch
dev_1
* master
切换分支
使用 git checkout <分支名>
切换到指定分支:
$ git checkout dev_1
Switched to branch 'dev_1'
$ git branch
* dev_1
master
创建并切换分支
也可以在创建分支的同时切换到刚创建的分支,使用 git checkout -b <分支名>
:
$ git checkout -b dev_2
Switched to a new branch 'dev_2'
$ git branch
dev_1
* dev_2
master
实操:合并分支
接下来演示如何在 dev
分支上给 index.js
增加内容并合并到 master
分支。
准备一个测试文件,在 master
分支上有 index.js
它的内容如下:
function f1() {
}
创建并切换到 dev
分支:
$ git checkout -b dev
Switched to a new branch 'dev'
在 dev
分支给 index.js
增加一些内容:
function f1() {
// 这是 dev 分支增加的内容
}
在 dev
分支提交 index.js
的修改:
$ git commit index.js -m '在index.js增加一行内容'
[dev f0bf942] 在index.js增加一行内容
1 file changed, 1 insertion(+), 1 deletion(-)
切换回 master
分支:
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
将刚刚在 dev
分支修改的内容合并到 master
分支:
git merge --no-ff -m "msg" <branch_name>
合并分支时禁用Fast forward
模式
如果使用fast-forward
方式进行分支合并,只是简单改变了分支指针,而不会产生新的commit
记录。
为了保证合并数据的完整性,我们也可以在合并时禁用fast-forward
方式,使用--no-ff
选项。 这样,在merge
时就会生成一个新的commit
,从日志上就可以看到分支合并记录了。
$ git merge --no-ff -m 'merge dev' dev
Updating 56e572c..f0bf942
Fast-forward
index.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
合并成功,push
到远程:
$ git push
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 345 bytes | 345.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.2]
To https://gitee.com/Cai_Programmer/temporary.git
56e572c..f0bf942 master -> master
实操:合并冲突
接下来演示两个分支 dev_1
与 dev_2
同时修改了 index.js
导致合并的时候出现冲突是如何解决的。
准备一个测试文件,在 master
分支上有 index.js
它的内容如下:
function f1() {
}
在 master
分支的基础上切换并新建 dev_1
分支,增加一行内容,随后提交:
$ git checkout -b dev_1
Switched to a new branch 'dev_1'
$ vim index.js
$cat index.js
function f1() {
// 在 dev_1 分支增加一行
}
$ git commit index.js -a '增加一行'
[dev_1 fed7707] add line
1 file changed, 1 insertion(+)
切换回 master
分支:
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
在 master
分支的基础上切换并新建 dev_2
分支,增加一行内容,随后提交:
$ git checkout -b dev_2
Switched to a new branch 'dev_2'
$ vim index.js
$cat index.js
function f1() {
// 在 dev_2 分支增加一行
}
$ git commit index.js -a '增加一行'
[dev_1 fed7707] add line
1 file changed, 1 insertion(+)
接下来切换到 master
分支,将 dev_1
与 dev_2
都合并到 master
分支:
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
$ git merge dev_1
Updating 95c1803..fed7707
Fast-forward
index.js | 1 +
1 file changed, 1 insertion(+)
$ git merge dev_2
Auto-merging index.js
CONFLICT (content): Merge conflict in index.js
Automatic merge failed; fix conflicts and then commit the result.
$ cat index.js
function f1() {
<<<<<<< HEAD
// 在 dev_1 分支增加一行
=======
// 在 dev_2 分支增加一行
>>>>>>> dev_2
}
可以看出合并的时候出现冲突了,git
将冲突显示在 index.js
文件内了,这时应该根据实际情况修改合并后的文件,随后用 git add .
与 git commit -a
提交合并:
$ vim index.js
$ cat index.js
function f1() {
// 在 dev_1 分支增加一行
// 在 dev_2 分支增加一行
}
$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
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: index.js
$ git add .
$ git commit -a -m '合并 dev_1 dev_2'
实操:将本地分支提交到远程
$ git push --set-upstream origin 分支名
实操:删除远程分支
$ git push origin --delete 分支名