走向大神之路的必备git命令操作

一直以来自己觉得已经有了sourceTree这些可视化Git工具了,没有必要去有针对性的训练git命令行工具操作了,现在细想起来极恐,掌握核心技术是非常的重要的,但是也需要我们通过熟练的工具使用来将我的思想,想法高效输出。另外作为一个团队的leader,很有必要对团队中出现效率降低的事情有预见性,并有相关的预案进行解决,学习git命令行,以及相关原理,对于团队中出现的常见,不常见的代码管理问题都有着不可忽视的作用。这篇文章,我整理了一些常见git命令操作,希望和大家一块学习进步。欢迎大家多多吐槽。

1,创建本地开发分支

git checkout -b dev (dev分支的名字)

git branch branchName(分支的名字)
 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

上面这个两个命令行都可以,我测试过了,暂时没发现有什么区别,哪位知道的欢迎交流哦。

2,把分支推送到远程分支

git push origin branchName    
git push origin branchNam:branchName  (第一个是本地分支的名字,第二个是远程分支m名字)
 
 
  • 1
  • 2
  • 1
  • 2

以上两个命令行都可以,不过第一个通常用于本地分支名字和远程分支名字相同的情况,而第二个命令不仅可以用于本地分支名字和远程分支名字相同的操作,也可以实现本地分支名字和远程分支名字不相同的情况。

3,删除本地分分支

git branch -d br  (br 要删除的分支的名字)
//注意不能删除当前所在分支,需要转到别的分支上。
//如果要删除的分支已经成功合并到当前分支,删除分支的操作会直接成功。
//如果要删除的分支没有合并到当前所在分支,则会出现提示,如果确定无须合并而要直接删除,则执行命令:
git branch -D br(分支名)
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

以上两个命令行,都可以。第一个比较保险些,但是会出现提示,如果没有merge到当前分支的话,是不可以删除的,所以我们在开发过程中使用第二个命令行的场景会比较多。

4,git 删除远程分支

git push origin :br  (origin 后面有空格)
git push origin --delete branchName(远程分支的名字)
 
 
  • 1
  • 2
  • 1
  • 2

两个命令行都可以,我这边已经测试过了,不过第一个命令行更加的简洁,我这边使用第一个命令行比较多一些。

5,分支的重命名

git branch -m oldBranchName NewBranchName  (对本地分支的重命名)
//-m不会覆盖已有分支名称,即如果名为NewBranchName的分支已经存在,则会提示已经存在了。
//如果改成-M就可以覆盖已有分支名称了,即会强制覆盖名为NewBranchName的分支,这种操作要谨慎。
 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

6,本地代码库回滚 
大家有看到我对这个标题有加粗,标红,这个相信大家都知道原因,我们在实际的开发过程中,遇到代码回滚的情况应该说是最多的了。

git reset --hard commit-id :回滚到commit-id,讲commit-id之后提交的commit都去除

git reset --hard HEAD~3:将最近3次的提交回滚

 
 
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

第一个命令主要是准确的回滚到某个commit,具体commitId我们可以通过git log来查看。 
第二个命令主要是回滚几个commit到之前,3个数字根据自己的实际需要进行操作哦。

7,分支的查看

git branch   (查看本地所有分支)
git branch -a (查看所有分支,本地远程都有)
git branch -r (查看远程分支)
 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

这个如果分支较少的话建议用第二个命令行哦,看的比较全面

8.如何撤销git add

git reset HEAD .
//如果是撤销所有的已经add的文件

git reset HEAD -filename
//如果是撤销某个文件或文件夹
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

9.查看日志

git log   (主要查看commit记录,以及相关commit id,时间等信息)
 
 
  • 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中:

git checkout master
git cherry-pick 27c2fc534d3b444fa19f88eca9aa2856202223d3
 
 
  • 1
  • 2
  • 1
  • 2

3) 要挑选多个提交可以选择提交的区间

git  cherry-pick starCommitID endCommitID  
// (提取一个commit到另一个commit之间的所以commit,包括starCommitID,包括endCommitID。真实验证过,网上的命令行不太准确)
 
 
  • 1
  • 2
  • 1
  • 2

11,git冲突的解决 
直接编辑冲突文件

解决步骤如下: 
1)git status 查看冲突文件 
2)打开冲突文件查看冲突内容 
如下:

a123
<<<<<<< HEAD
b789
=======
b45678910
>>>>>>> 6853e5ff961e684d3a6c02d4d06183b5ff330dcc
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

其中:冲突标记<<<<<<< (7个<)与=======之间的内容是我的修改(当前分支的修改),=======与>>>>>>>之间的内容是别人的修改。 
此时,还没有任何其它垃圾文件产生。

将冲突内容解决后,就可以重新

 git add .
git commit
 
 
  • 1
  • 2
  • 1
  • 2

等相关操作

12, tag的操作

1)查看本地tag

git tag
 
 
  • 1
  • 1

注:暂时没找到查看远程tag的命令行,如果哪位知道的麻烦告知一下哦,多谢了

2)本地添加tag

git tag 0.1.0    ( 不需要填写tag信息)
git tag -a 0.1.0 (需要填写tag信息)
git tag -a v1.4 -m 'my version 1.4'  (也可以一步到位,直接在后面写上tag信息)
 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

3)后期加注tag。对之前某个提交点的代码打tag

 git tag -a v1.2 commitID (其中commitID为某个时刻提交点的commitID)
 
 
  • 1
  • 1

3)将本地tag推送到远程分支

git push --tag    ( 将当前分支所有本地没有提交的tag都提交到远程 仓库中)
git push origin --tag ( 将当前分支所有本地没有提交的tag都提交到远程 仓库中)
 
 
  • 1
  • 2
  • 1
  • 2

这两个命令行都可以我都已经进行过验证了,但是第一个命令行更加简洁些,另外这两个命令行会把当前分支所有的没有提交到远程的tag都提交到远程去,这个大家需要注意哦

4) 删除远程仓库中的tag

git push origin :tag   删除远程仓库的tag(origin后有一个空格)
 
 
  • 1
  • 1

这个和删除远程的分支类似

13, git fetch和git pull的区别

Git中从远程的分支获取最新的版本到本地有这样2个命令: 
1) git fetch //相当于是从远程获取最新版本到本地,不会自动merge

git fetch origin master:tmp
git diff tmp
git merge tmp
 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

以上命令的含义: 
首先从远程的origin的master主分支下载最新的版本到tmp分支上 
然后比较本地的当前分支和tmp分支的差别 
最后进行合并 
2) git pull //相当于是从远程获取最新版本并merge到本地

git pull origin remoteBranch
 
 
  • 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/ 
这篇博客里有详细的介绍,我这里就不班门弄斧了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值