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

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

1,创建本地开发分支
git checkout -b dev (dev分支的名字)//创建分支,并切换到dev分支

 git checkout -B dev(dev分支的名字)//创建分支,并切换到dev分支,-b操作的话,如果本地存在同名分支,则会操作失败,并有错误提示,而 -B则可以直接覆盖本地分支。

git branch branchName(分支的名字) //创建分支,但是没有切换分支,仍然留在当前分支
git checkout -b branchName origin/remoteBranchName //拉取远程分支,在本地创建分支。 更加适合本地分支名字和远程分支名字不一致的情况
git checkout branchName   //拉取远程分支,在本地创建分支,适合远程分支和本地分支的名字一样
2,把分支推送到远程分支
git push origin branchName    
git push origin branchNam:branchName  (第一个是本地分支的名字,第二个是远程分支m名字)

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

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

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

4,git 删除远程分支
git push origin :br  (origin 后面有空格)
git push origin --delete branchName(远程分支的名字)

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

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

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

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

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

git reset --hard HEAD :回滚到最近一次的commit,没有commit的内容会全部discard掉

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

7,分支的查看
git branch   (查看本地所有分支)
git branch -a (查看所有分支,本地远程都有)
git branch -r (查看远程分支)

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

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

git reset HEAD -filename
//如果是撤销某个文件或文件夹
9.查看日志
git log   (主要查看commit记录,以及相关commit id,时间等信息)
10,误删除的操作
  1. 执行 rm fileName 进行了错误的删除操作
    解释:此时只删除了删除工作区的文件后
    解决方案 git checkout fileName

2)执行 git rm fileName 进行了错误的删除操作
解释:此时删除了工作区的相关文件,同时也把删除操作保存到了暂存区
解决方案:git checkout commitId fileName (其中commitId为 最近一的一次commitId,可以通过git log 查看)

10,分支的合并

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. 要挑选多个提交可以选择提交的区间
git  cherry-pick starCommitID endCommitID  
// (提取一个commit到另一个commit之间的所以commit,包括starCommitID,包括endCommitID。真实验证过,网上的命令行不太准确)
11,git冲突的解决

直接编辑冲突文件

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

a123
<<<<<<< HEAD
b789
=======
b45678910
>>>>>>> 6853e5ff961e684d3a6c02d4d06183b5ff330dcc

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

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

 git add .
git commit

等相关操作

12, tag的操作

1)查看本地tag

git tag

注:暂时没找到查看远程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信息)

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

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

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

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

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

4) 删除远程仓库中的tag

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

这个和删除远程的分支类似,但是如果有tag名和分支名相同的情况下,会出现异常,这个时候需要用下面的git命令行来操作。

git push origin :refs/tags/[tagName] 注意:“:” 前面要有空格
  1. 删除本地仓库中的tag
git tag -d tagName //tagName 是tag的名字
  1. 根据tag查看当时的代码 ⚠️重点
git checkout -b testBranchName tag //testBranchName 本地新创建的分支的名字, tag:标签的名字   而且在新分支里查看完代码,如果有修改也可以修改,修改后合并到主分支。
13, git fetch和git pull的区别

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

git fetch origin master:tmp
git diff tmp
git merge tmp

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

git pull origin remoteBranch

上述命令其实相当于git fetch 和 git merge
在实际使用中,git fetch更安全一些

因为在merge前,我们可以查看更新情况,然后再决定是否合并

14,git revert 和 git reset的区别
  1. git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
git revert c011eb3c20ba6fb38cc94fe5a8dda366a3990c61

  1. 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。
  2. git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。
    最重要的一点是,git reset多用于解决未提交的回滚,而git revert 多用于已经提交到远程的回滚
    参考博客:
    http://yijiebuyi.com/blog/8f985d539566d0bf3b804df6be4e0c90.html
    对于merge造成的冲突,需要用git rever -m 1 commitId,git rever -m 2 commitId其中1,2分别代表不同的分支。具体参考网址:https://segmentfault.com/a/1190000015792394
15,git rebase 和git merge的区别

大神博客地址:http://blog.csdn.net/hudashi/article/details/7664631/
这篇博客里有详细的介绍,我这里就不班门弄斧了
在这里插入图片描述

16,修改用户名

1)全局修改用户名

git config --global user.name "jack"
git config --global user.email "123456@qq.com"

查看用户名配置

git config -l

为单个工程设置用户名和邮箱
进入到工程相关的目录下,然后执行

git config user.name "jack"
git config user.email "123456@qq.com"

注意:一般情况下单个工程如果没有设置用户名,邮箱。会显示全局的用户名和邮箱

17, git 取消文件追踪

对所有文件都取消跟踪

git rm -r --cached .     //不删除本地文件
git rm -r -f .           //删除本地文件

对某个文件取消跟踪

git rm -r --cached fileName  // 取消对该文件的追踪,并且本地不删除该文件
git rm -r -f filename        // 取消对该文件的追踪,并且本地删除该文件

然后执行git commit 就可以了。参考博客:git取消文件跟踪

18,通过某个commitID创建临时分支

在开发过程中要在,某个commit之后添加代码修复问题,需要通过某个commitID来创建临时分支。

1、git log 查看提交
2、// 通过checkout 跟上commitId 即可创建制定commit之前的本地分支 
git checkout commitId -b testBranch //其中testBrach为临时分支的名字
//checkout的代码为该commitId之前的代码
19,多个commit合并未一个

可以参考下面的博客
《「Git」合并多个 Commit》

20, git reflog

可以查看git的提交记录,以及分支,包含已删除的分支
可以参考下面的博客
《git还原已删除的分支》

20, git stash

可以参考下面的博客
《git stash 用法总结和注意点》

git常见问题集锦

#####1)git pull 失败 ,提示:fatal: refusing to merge unrelated histories
在进行git pull 时,添加一个可选项

git pull origin master --allow-unrelated-histories
  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值