基本操作
查看分支
使用 git branch 查看分支,-a 参数查看所有分支,包括远程的分支:
$ git branch* master$ git branch -a* masterremotes/origin/HEAD -> origin/masterremotes/origin/master
创建分支
使用 git branch <分支名> 创建分支:
$ git branch dev$ git branchdev* master
删除分支
使用 git branch -d <分支名> 删除分支:
$ git branch -d devDeleted branch dev (was 9a995da).$ git branch* master
重命名分支
使用 git branch move <旧分支名> <新分支名> 重命名分支,它与 linux 中的 mv 命令类似:
$ git branch -m dev dev_1$ git branchdev_1* master
切换分支
使用 git checkout <分支名> 切换到指定分支:
$ git checkout dev_1Switched to branch 'dev_1'$ git branch* dev_1master
创建并切换分支
也可以在创建分支的同时切换到刚创建的分支,使用 git checkout -b <分支名>:
$ git checkout -b dev_2Switched to a new branch 'dev_2'$ git branchdev_1* dev_2master
实操:合并分支
接下来演示如何在 dev 分支上给 index.js 增加内容并合并到 master 分支。
准备一个测试文件,在 master 分支上有 index.js 它的内容如下:
function f1() {}
创建并切换到 dev 分支:
$ git checkout -b devSwitched 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 masterSwitched 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' devUpdating 56e572c..f0bf942Fast-forwardindex.js | 2 +-1 file changed, 1 insertion(+), 1 deletion(-)
合并成功,push 到远程:
$ git pushCounting 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.git56e572c..f0bf942 master -> master
实操:合并冲突
接下来演示两个分支 dev_1 与 dev_2 同时修改了 index.js 导致合并的时候出现冲突是如何解决的。
准备一个测试文件,在 master 分支上有 index.js 它的内容如下:
function f1() {}
在 master 分支的基础上切换并新建 dev_1 分支,增加一行内容,随后提交:
$ git checkout -b dev_1Switched to a new branch 'dev_1'$ vim index.js$cat index.jsfunction f1() {// 在 dev_1 分支增加一行}$ git commit index.js -a '增加一行'[dev_1 fed7707] add line1 file changed, 1 insertion(+)
切换回 master 分支:
$ git checkout masterSwitched to branch 'master'Your branch is up to date with 'origin/master'.
在 master 分支的基础上切换并新建 dev_2 分支,增加一行内容,随后提交:
$ git checkout -b dev_2Switched to a new branch 'dev_2'$ vim index.js$cat index.jsfunction f1() {// 在 dev_2 分支增加一行}$ git commit index.js -a '增加一行'[dev_1 fed7707] add line1 file changed, 1 insertion(+)
接下来切换到 master 分支,将 dev_1 与 dev_2 都合并到 master 分支:
$ git checkout masterSwitched to branch 'master'Your branch is up to date with 'origin/master'.$ git merge dev_1Updating 95c1803..fed7707Fast-forwardindex.js | 1 +1 file changed, 1 insertion(+)$ git merge dev_2Auto-merging index.jsCONFLICT (content): Merge conflict in index.jsAutomatic merge failed; fix conflicts and then commit the result.$ cat index.jsfunction f1() {<<<<<<< HEAD// 在 dev_1 分支增加一行=======// 在 dev_2 分支增加一行>>>>>>> dev_2}
可以看出合并的时候出现冲突了,git 将冲突显示在 index.js 文件内了,这时应该根据实际情况修改合并后的文件,随后用 git add . 与 git commit -a 提交合并:
$ vim index.js$ cat index.jsfunction f1() {// 在 dev_1 分支增加一行// 在 dev_2 分支增加一行}$ git statusOn branch masterYour 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 分支名
