一直以来自己觉得已经有了sourceTree这些可视化Git工具了,没有必要去有针对性的训练git命令行工具操作了,现在细想起来极恐,掌握核心技术是非常的重要的,但是也需要我们通过熟练的工具使用来将我的思想,想法高效输出。另外作为一个团队的leader,很有必要对团队中出现效率降低的事情有预见性,并有相关的预案进行解决,学习git命令行,以及相关原理,对于团队中出现的常见,不常见的代码管理问题都有着不可忽视的作用。这篇文章,我整理了一些常见git命令操作,希望和大家一块学习进步。欢迎大家多多吐槽。
1,创建本地开发分支
- 1
- 2
- 3
- 1
- 2
- 3
上面这个两个命令行都可以,我测试过了,暂时没发现有什么区别,哪位知道的欢迎交流哦。
2,把分支推送到远程分支
- 1
- 2
- 1
- 2
以上两个命令行都可以,不过第一个通常用于本地分支名字和远程分支名字相同的情况,而第二个命令不仅可以用于本地分支名字和远程分支名字相同的操作,也可以实现本地分支名字和远程分支名字不相同的情况。
3,删除本地分分支
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
以上两个命令行,都可以。第一个比较保险些,但是会出现提示,如果没有merge到当前分支的话,是不可以删除的,所以我们在开发过程中使用第二个命令行的场景会比较多。
4,git 删除远程分支
- 1
- 2
- 1
- 2
两个命令行都可以,我这边已经测试过了,不过第一个命令行更加的简洁,我这边使用第一个命令行比较多一些。
5,分支的重命名
- 1
- 2
- 3
- 1
- 2
- 3
6,本地代码库回滚
大家有看到我对这个标题有加粗,标红,这个相信大家都知道原因,我们在实际的开发过程中,遇到代码回滚的情况应该说是最多的了。
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
第一个命令主要是准确的回滚到某个commit,具体commitId我们可以通过git log
来查看。
第二个命令主要是回滚几个commit到之前,3个数字根据自己的实际需要进行操作哦。
7,分支的查看
- 1
- 2
- 3
- 1
- 2
- 3
这个如果分支较少的话建议用第二个命令行哦,看的比较全面
8.如何撤销git add
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
9.查看日志
- 1
- 1
10,误删除的操作
1) 执行 rm fileName
进行了错误的删除操作
解释:此时只删除了删除工作区的文件后
解决方案 git checkout fileName
2)执行 git rm fileName
进行了错误的删除操作
解释:此时删除了工作区的相关文件,同时也把删除操作保存到了暂存区
解决方案:git checkout commitId fileName
(其中commitId为 最近一的一次commitId,可以通过git log
查看)
11,分支的合并
1)直接合并
git merge branchName
(将branchName的分支合并到当前分支)
注意没参数的情况下merge是fast-forward的,即Git将当前分支的指针直接移到branchName的最前方。换句话说,如果顺着一个分支走下去可以到达另一个分支的话,那么Git在合并两者时,只会简单移动指针,所以这种合并成为快进式(Fast-forward)。
2) 挑选合并
拣选另一条分支上的某个提交条目的改动带到当前分支上。
每一次提交都会产生一个全局唯一的提交名称,利用这个名称就可以进行拣选提交。
比如在dev上的某个提交叫:27c2fc534d3b444fa19f88eca9aa2856202223d3
把它合并到master中:
- 1
- 2
- 1
- 2
3) 要挑选多个提交可以选择提交的区间
- 1
- 2
- 1
- 2
11,git冲突的解决
直接编辑冲突文件
解决步骤如下:
1)git status
查看冲突文件
2)打开冲突文件查看冲突内容
如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
其中:冲突标记<<<<<<< (7个<)与=======之间的内容是我的修改(当前分支的修改),=======与>>>>>>>之间的内容是别人的修改。
此时,还没有任何其它垃圾文件产生。
将冲突内容解决后,就可以重新
- 1
- 2
- 1
- 2
等相关操作
12, tag的操作
1)查看本地tag
- 1
- 1
注:暂时没找到查看远程tag的命令行,如果哪位知道的麻烦告知一下哦,多谢了
2)本地添加tag
- 1
- 2
- 3
- 1
- 2
- 3
3)后期加注tag。对之前某个提交点的代码打tag
- 1
- 1
3)将本地tag推送到远程分支
- 1
- 2
- 1
- 2
这两个命令行都可以我都已经进行过验证了,但是第一个命令行更加简洁些,另外这两个命令行会把当前分支所有的没有提交到远程的tag都提交到远程去,这个大家需要注意哦
4) 删除远程仓库中的tag
- 1
- 1
这个和删除远程的分支类似
13, git fetch和git pull的区别
Git中从远程的分支获取最新的版本到本地有这样2个命令:
1) git fetch //相当于是从远程获取最新版本到本地,不会自动merge
- 1
- 2
- 3
- 1
- 2
- 3
以上命令的含义:
首先从远程的origin的master主分支下载最新的版本到tmp分支上
然后比较本地的当前分支和tmp分支的差别
最后进行合并
2) git pull //相当于是从远程获取最新版本并merge到本地
- 1
- 1
上述命令其实相当于git fetch 和 git merge
在实际使用中,git fetch更安全一些
因为在merge前,我们可以查看更新情况,然后再决定是否合并
14,git revert 和 git reset的区别
1) git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
2) 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。
3) git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。
最重要的一点是,git reset
多用于解决未提交的回滚,而git revert
多用于已经提交到远程的回滚
参考博客:
http://yijiebuyi.com/blog/8f985d539566d0bf3b804df6be4e0c90.html
15,git rebase 和git merge的区别
大神博客地址:http://blog.csdn.net/hudashi/article/details/7664631/
这篇博客里有详细的介绍,我这里就不班门弄斧了