Git分支
分支即是平行空间,假设你在为某个手机系统研发拍照功能,代码已经完成了80%,但如果将这不完整的代码直接提交到git仓库中,又有可能影响到其他人的工作,此时我们便可以在该软件的项目之上创建一个名叫"拍照功能"的分支,这种分支只会属于你自己,而其他人看不到,等代码编写完成后再与原来的项目主分支合并下即可,这样即能保证代码不丢失,又不影响其他人的工作。
一般在实际的项目开发中,我们要尽量保证master分支是非常稳定的,仅用于发布新版本,平时不要随便直接修改里面的数据文件,而工作的时候则可以创建不同的工作分支,等到工作完成后在合并到master分支上面,所以团队的合作分支看起来会像上面的图那样。
[root@git ~/git_data]# git log --oneline --decorate ef16b0b (HEAD, master) add ddd #默认分支指向你最后一次的提交 HEAD头、指针 6118c8d add bbb #HEAD 指针指向哪个分支、说明你当前在哪个分支下工作18c89e4 modified a 1a85735 rename a.txt a64e0f41 commit a.txt c6b0ac2 new file a
1.新建testing分支
[root@git ~/git_data]# git branch testing # *号在哪里就说明当前在哪个分支上如下图所示: [root@git ~/git_data]# git branch * master testing
#通过命令查看分支指向 [root@git ~/git_data]# git log --oneline --decorate ef16b0b (HEAD, testing, master) add ddd 6118c8d add bbb 18c89e4 modified a 1a85735 rename a.txt a64e0f41 commit a.txt c6b0ac2 new file a #切换到testing分支、对应的HEAD指针也指向了testing [root@git ~/git_data]# git checkout testing Switched to branch 'testing' #HEAD指针指向了testing [root@git ~/git_data]# git branch master * testing
[root@git ~/git_data]# touch test [root@git ~/git_data]# git add . [root@git ~/git_data]# git commit -m 'commit test' [testing 0924a70] commit test 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 test [root@git ~/git_data]# git log --oneline --decorate 0924a70 (HEAD, testing) commit test ef16b0b (master) add ddd 6118c8d add bbb 18c89e4 modified a 1a85735 rename a.txt a 64e0f41 commit a.txt c6b0ac2 new file a
[root@git ~/git_data]# git checkout master Switched to branch 'master' [root@git ~/git_data]# git branch * master testing [root@git ~/git_data]# ll #正常情况下是没有test文件的、保证master分支是线上环境的total 4 -rw-r--r-- 1 root root 16 Oct 20 18:36 a
[root@git ~/git_data]# touch master [root@git ~/git_data]# git add . [root@git ~/git_data]# git commit -m "commit master" [master 8efaada] commit master 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 master [root@git ~/git_data]# ll total 4 -rw-r--r-- 1 root root 16 Oct 20 18:36 a-rw-r--r-- 1 root root 0 Nov 16 12:21 master
2.合并分支
[root@git ~/git_data]# git merge testing Merge branch 'testing' #Please enter a commit message to explain why this merge is necessary, # especially if it merges an updated upstream into a topic branch. # # Lines starting with '#' will be ignored, and an empty message aborts # the commit. merge testing to master #提示输入描述信息,相当于git的-m参数 #查看日志记录 [root@git ~/git_data]# git log --oneline --decorate 0fcf3ce (HEAD, master) Merge branch 'testing' 8efaada commit master 0924a70 (testing) commit teste f16b0b add ddd 6118c8d add bbb 18c89e4 modified a 1a85735 rename a.txt a64e0f41 commit a.txt c6b0ac2 new file a
3.合并冲突
[root@git ~/git_data]# echo "master" >> a [root@git ~/git_data]# git commit -am "modified a master" [master a3d84f3] modified a master 1 file changed, 1 insertion(+) [root@git ~/git_data]# git checkout testing Switched to branch 'testing' [root@git ~/git_data]# git branch master * testing [root@git ~/git_data]# cat a aaa ccc bbb ddd [root@git ~/git_data]# echo "testing" >>a [root@git ~/git_data]# git commit -am "modified a on testing branch" [testing 23dec52] modified a on testing branch 1 file changed, 1 insertion(+) [root@git ~/git_data]# git checkout master Switched to branch 'master' [root@git ~/git_data]# git merge testing Auto-merging a CONFLICT (content): Merge conflict in a Automatic merge failed; fix conflicts and then commit the result. [root@git ~/git_data]# cat a #冲突的文件自动标识到文件里,手动更改冲突要保留的代码 aaa ccc bbb ddd <<<<<<< HEAD master ======= testing >>>>>>> testing [root@git ~/git_data]# git commit -am "merge testing to master" #提交 [master 5beb7bb] merge testing to master [root@git ~/git_data]# git log --oneline --decorate 5beb7bb (HEAD, master) merge testing to master 23dec52 (testing) modified a on testing branch a3d84f3 modified a master 0fcf3ce Merge branch 'testing' 8efaada commit master 0924a70 commit test ef16b0b add ddd 6118c8d add bbb 18c89e4 modified a 1a85735 rename a.txt a64e0f41 commit a.txt c6b0ac2 new file a
4.删除分支
[root@git ~/git_data]# git branch -d testing Deleted branch testing (was 23dec52). [root@git ~/git_data]# git branch * master
Git标签使用
标签也是指向了一次commit提交,是一个里程碑式的标签,回滚打标签直接加标签号,不加唯一字符串不好记
#-a指定标签名字 -m 指定说明文字 [root@git ~/git_data]# git tag -a v1.0 -m "aaa bbb master tesing version v1.0"
1.查看标签
[root@git ~/git_data]# git tag v1.0 # 指定某一次的提交为标签 [root@git ~/git_data]# git tag -a v2.0 0924a70 -m "add bbb version v2.0" # 查看v1.0的信息 git show 加标签查看 [root@git ~/git_data]# git reset --hard v2.0 HEAD is now at 0924a70 commit test [root@git ~/git_data]# ll total 4 -rw-r--r-- 1 root root 16 Nov 16 15:04 a -rw-r--r-- 1 root root 0 Nov 16 12:22 test
02.删除标签
[root@git ~/git_data]# git tag -d v2.0 Deleted tag 'v2.0' (was b0b964c) [root@git ~/git_data]# git tagv1.0