git用法进阶

==> 学习汇总(持续更新)
==> 从零搭建后端基础设施系列(一)-- 背景介绍


前言:

相信很多还没有工作的同学,对于git的用法还普遍停留在git clone,git push,git pull这些命令,并且用的还不深,接下来,将我在工作中常用到的git命令,分享给大家~

场景一(git push):

小白:嘿~,小黑,最近我遇到了点问题,对git push有点疑惑,可以请教一下你吗?
小黑:嗯,问吧,没有我不知道的。
小白:嘿嘿,果然是大神。是这样的,我在本地创建了一个dev分支(git checkout -b dev),
但是如何在远程也创建一个分支呢?是不是要在页面上点新建branch?
小黑:哈?这么简单的问题还要来麻烦我,我还以为遇到了什么有挑战的问题呢。
小白:哈哈,你是大神当然简单拉,你就指点指点我嘛~
小黑:那好吧,我就给你这个小白好好讲一下。首先,创建本地分支你用的命令是对的,然后你的想法居然是如何在远程创建一个分支?你为什么不想想怎么把当前这个分支直接push上去呢?是不是没想到,还有这个骚操作,哈哈。没错,你在本地push的时候,如果远程没有该分支,会自动创建该分支,若有的话,则会更新该分支。这下子懂了吧。
小白:哇哦,原来这么简单,懂了懂了,大神厉害!那,如果删除远程的分支呢?
小黑:嘿嘿,告诉你一个简单的办法。

//创建一个本地test分支
git checkout -b test 
//将test分支推到远程
git push origin test
//删除远程test分支
git push origin :test

其原理就是将一个空的分支推到test,这就相当于删除了该分支,哈哈。
小白:哈哈,果然是骚操作。那我还有个问题,如果我发现刚才push的代码有问题,如何补救呢?
小黑:这个问题问得好,其实这种操作还是会遇到的。当遇到这种情况的时候,先把本地的代码回退到上一个commit,然后强推上去,覆盖远程的commit。

//回退到上一个commit,注意这里的pre-commit只是一个代号,不是命令哈,使用git log 拿到上一个commit号
git reset --hard pre-commit
//强推该版本的代码上去
git push origin test --force

小白:哇,厉害,嘿嘿,大神,今天就先到这里,这个命令已经够我日常开发用啦。

场景二(git fetch):

小白:嗨,小黑我又来了,哈哈。
小黑:(翻白眼)今天又想问啥呀?
小白:哈哈,被你发现了。就是,最近开发的时候,使用git branch -r ,看到有A、B、C三个分支,但是呢,实际上C已经被其它同事删除了,我还傻乎乎的以为C还在呢。
小黑:哈哈,那你是不知道git fetch有一个参数,就是为了解决这种问题的吧,来我教你用。

//使用这个-p参数后,从远程拉取分支回来后,还会自动帮你删掉远程已经被删除的分支,这样,当你
//用git branch -r再看的时候就发现没有这个分支了
git fetch origin -p

小白:嘿嘿,哈哈,谢谢大神~

场景三(git checkout):

小白:大神!还是我!
小黑:我去,又是你,交钱!
小白:嘿嘿,哈哈,咱两的交情谈钱伤感情。快快,我又有问题想问你了。
小黑:(翻白眼)切,问吧,小样。
小白:就是啊,有时候开发的时候,写着写着,发现写错了,但是已经写了一大片,我每次都用git status,找出我改过的文件,然后一行行的还原。。。我快要崩溃了。
小黑:说你是小白,你还真是小白,这么愚蠢的办法(我刚上班的时候就是。。。)你都想得出来,真的看不下去了!看着,

//把所有更改都还原了,没错,checkout后面就是一个点
git checkout .
//只想还原某个文件的所有操作
git status
git checkout filename

小白:好厉害啊,我怎么没想到,真的是太方便了!咦,那我如果我已经git add了呢?
小黑:嗯,这个就稍微多了一个步骤

//一次性还原所有git add过的文件
git reset HEAD
//再一次性还原所有操作过的文件
git checkout .

//如果只想还原某个git add过的文件
git reset HEAD filename
//再还原这个文件的操作
git checkout filename

小白:那那那,如果已经git commit了呢?
小黑:那只能祭出终极大招了!

//找到上一个版本的commit号
git log
//回退到那个版本
git reset --hard pre-commit

//如果你不想当什么都没发生过,还有一种比较温柔的方法
git reset HEAD~1
//这个时候就相当于撤销了,git commit和git add

这样就像什么事情都没发生过一样,嘿嘿。
小白:哇,好厉害,这样我已经就不怕乱操作了,哈哈,一切都可以还原。




时间问题,我把剩余总结的一起贴出来了。

 git remote 只显示远程git名字 	

  git remote -v 查看远程git详细信息

  git remote add remote_name remote_git_addr 添加远程git地址

  git remove rm  remote_name 删除远程git地址

  git remote rename remote_name new_name 更改名字
   git log 默认分页显示

   git log -[length] 指定显示条数

   git log -p 显示详细信息

   git log --oneline 每一条commit只显示一行
   
   操作和git log一样,不同的是,git reflog可以查看所有分支的所有操作记录,包括删除的的commit记录。

 git branch  显示本地的分支

  git branch -r 显示远程分支

  git branch -a 显示本地和远程的分支
  git fetch  git merge = git pull

  git fetch的优点是可以选择性的合并,例如:

  a.git fetch origin 远程分支:temp
  b.git diff temp   //比较本地代码与刚刚从远程下载下来的代码的区别
  c.git merge temp
  d.git branch -d temp
  不带任何参数的git push,默认只推送当前分支,这叫做simple方式。此外,还有一种matching方式,会推送所有有对应的远程分支的本地分支。Git 2.0版本之前,默认采用matching方法,现在改为默认采用simple方式。如果要修改这个设置,可以采用git config命令。

  git push <远程主机名> <本地分支名>:<远程分支名>

  git push origin 本地分支名  如果远程有该分支则更新该分支,否则新建该分支

  git push origin :远程分支名  相当于删除远程分支

  git push --force origin 本地分支 强制推送,也就是覆盖远程分支的提交

  使用场景:当不小心push了错误的代码到远程分支,那么在本地改了之后,可以使用这个命令,覆盖远程分支。
          但是!一定要确保此时或者未来数分钟没有人提交代码,否则将会被覆盖掉。这个功能还是要慎用。

  git push origin --tags 只有加上这个参数,才会把标签push上去
  git status 查看当前状态(修改的文件为红色,使用git add后,变为黄绿色)
  git add filename 将指定文件添加到本地git仓库
  git add . 将所有修改的文件添加到本地git仓库
  git commit -m comment 将add操作提交并且附带注释
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值