git的使用
前言:
开发好的代码在上线前需要push,打包等等,有很多的工作也是需要运维来进行操作的,看到一篇不错的博客,修改下无关内容,保存下来,以备后用。
日常Git使用场景
一、如果这个项目的代码我们在本地还没有,我们先去GitLab里边找对应的Git地址,然后Clone到本地:
git clone https://github.com/ZhongFuCheng3y/3y.g
二、接到了新的需求,我们要新建一个分支,然后基于这个分支去开发:
git checkout -b feature/sanwaiAddLog
在开发的时候,我们肯定会有两个操作:
- 在原来的基础上添加新的文件
- 在原有的文件上修改
三、不管怎么样,等我们做到一定程度了,我们都会提交代码。如果我们添加了新的文件,我们需要先add
,然后再commit
git add .
git commit -m "try to commit files to GitHub, i am java3y"
四、假设我们一切顺利,在没人打扰的情况下已经写好了代码了,然后我们会把自己的分支push
到远程仓库
git push
五、假设我们写到一半,其他小伙伴已经把他的代码merge
到主分支了,我们也需要把他最新的 代码给pull
拉取下来(可以 git fetch + git merge 替代)。
git pull
如果没有冲突,那git就会把他的代码给merge
到我当前的分支上。如果有冲突,Git会提醒我去手动解决一下冲突。
六、假设我们写到一半了,现在工作区的代码都已经commit
了。此时同事说要不帮忙一起排查一个问题,同事一般用的是自己分支,于是就得问他:你用的哪个分支啊?于是得把他的分支给拉下来,看看他的代码哪儿有问题
git fecth -- 手动拉取远程仓库更新的信息
git checkout 分支名 -- 切换到他的分支
现在切换到他的分支,相当于你的环境跟他的环境是一模一样的,于是就可以愉快地一起看Bug了。
七、假设我们写到一半了,现在工作区的代码还没commit
。现在有同事说要排查问题或者一个新的Bug被发现了,要紧急切换到其他的分支。现在我又不想commit
(我就写了一半,编译还报着错误,没理由让我commit
吧)。
这时,我会把工作区的代码先stash
到暂存区给保存起来,然后就可以愉快地切换其他的分支了。
git stash
等我解决完另一个bug或者帮别人看完问题了,我再把刚刚保存在暂存区的代码给捞出来,继续干活
git stash pop
八、我一直在修Bug,现在的分支已经被我搞得人摸鬼样了,我非常难受,甚至不知道自己在这个过程中改了多少东西了。
思路已经完全被打乱了,我想回到一个稳定的commit
重新出发,重来吧(通过下面的命令,把工作区的代码都改成对应commit的代码了)。
git reset --hard 版本号
那我怎么找到版本号呢?Git也是有日志的:
git log --pretty=oneline
常用的Git命令
查看Git工作区、暂存区的变更情况(可以知道哪些没有commit、哪些没有被Git追踪):git status
拉取远程最新的变更到本地:git fetch
切换分支:git checkout 分支名
将代码还原到某个版本(包括工作目录):git reset --hard 版本号
查看Git的提交(commit)记录:git log
将代码还原到某个版本后,后悔了,想重新回去,但在提交记录已经找不到了。git reset --hard
把reset 之后的 commit
都给抹杀掉了。找到最近的执行Git命令:git reflog
还原到某个版本了,现在我为了稳健,不想再原来的分支上修改了,再新建一个分支吧(-b
参数把当前分支切换到了要创建的分支上):git checkout -b 分支名
我们把上一次还是”相对稳健“的分支合并到我新建的分支上:git merge 分支
突然想看看现在有多少个分支:git branch -a
新增几个文件了,随手git add
一下吧
改得差不多了,随手git commit -m
一下吧,最好还是写好备注,不然以后等改多了,你都不知道你改了什么啦。
改完了,提交到远程吧:git push
想把远程分支最新的代码给拉下来,然后合并到本地上。我们可以用git fetch
和git merge
来实现,也可以通过git pull
来实现。一般我用的都是git fetch
+git merge
,这样会更加可控一些
有的时候,本地分支在master分支,然后忘了切其他的分支去修改,直接在master改了,然后也push到远程了。等你发现的时候,你会真的想骂自己。
咋办?最简单的办法其实我们还是可以git reset --hard
到对应的版本,然后将其修改或者复原,再强制提交到master
分支:git push -u origin/master -f
在这篇文章中,我列出的Git常用的命令其实并不多。
像很多博客讲的diff
、tag
、config
之类的命令我都没有讲,我这边现实开发时这些命令也没怎么用过...
其实现在IDEA
也很强大,很多时候都可以配合IDEA
给我们提供的Git
去做很多事。有的场景敲命令会比较方便,有的时候就直接图形化界面就比较方便。
就diff
这个功能而言, 肯定还是图形界面好用一些吧(至少我是这样认为的
IDEA配合一些快捷键,使用Git也能爽得飞起。Git始终也只是一个工具,如果你有兴趣可以了解它的实现(我觉得大部分人可能不知道它是怎么实现的);
如果没兴趣看它的实现,了解它是怎么使用的,也足够应付日常的开发场景了。
总的来说,现在的互联网公司大多数还是用Git的,Git本身使用上其实不难,只要理解了Git是干嘛的,它有个本地仓库的概念,它可以来回穿梭各种版本,然后将本地的信息提交到远程,跟着教程把常用的命令敲敲也差不多了。
git add -A ./ git checkout dev git pull origin dev git checkout master git merge dev git tag -l git tag -l -n git tag -a release-v0.4.0 -m "release 0.4.0 version" git push origin master --tags git checkout dev 删除标签: git tag -d release-v1.27.0 git push origin :refs/tags/v1.27.0 kubectl exec -it credit-backend-787949b5cd-bqltr -n=lianhua -c=phpfpm /bin/bash php marmot cacheClear