前言
Git使用相信大家都会,也很简单,无非就是add commit pull push,但是当出现冲突,或者是查看版本修改并回退的时候,指令的方式就很繁琐,所以就出现了很多git界面工具,比如git自己的GUI,小乌龟TortoiseGit,Sourcetree,vscode的GitLens,本文主要介绍git常用指令以及结合vscode的使用,希望对对git不是很熟悉的小伙伴提供帮助。
GIT命令行
常规提交
一般来说,如果确定不会有冲突(比如最近一段时间开发者都是自己),那步骤就是
- git add . ——暂存的代码才会被commit识别,有些不想提交的文件可以不add
- git commit -m ‘描述信息’ ——这个时候代码还在本地
- git pull ——拉取变更到本地并且合并到本地分支(区别于git fecth,后面会讲,如果可能会冲突,那不应该用pull)
- git push ——推送到远程,没有pull可能会报错,因为远程跟本地的状态可能不一样
以当前分支为develop为例,常用指令如下
git checkout develop
git checkout -b develop
查看本地变化
git status
添加到追踪(待提交)
git add .
git add readme.md
git add src
拉取远程代码并合并到本地
git pull
git pull origin master
提交到本地
git commit -m 'feat: 添加某功能'
推送到远程
git push
git push origin master
git stash
git add是把文件存到stage中,stage是当前分支待提交的,还有一个stash是一个全部分支都能拿到的暂存空间 应用场景:
- 代码写一半还不想提交,有人修复了一个bug你想拉取下来。
git stash——>git pull——>git stash pop - 想在develop上开发,但是不小心写到了master上(stash中的内容可以转移到任意分支)。
git stash——>git checkout develop——>git stash pop
入栈
git stash
git stash push '文件路径'
git stash save
出栈
git stash pop
git stash drop '文件路径'
git stash apply
git stash clear
查看(查看不常用,一般不会暂存很多次)
git stash list
git stash show
git stash show 1
解决冲突
如果你跟别人同时修改了一个文件,然后别人已经提交了,那么拉取代码下来就会用冲突 当你 add commit pull之后就会变成下面这样
HEAD到==是本地的变更,=到>是远程的变更上面有写提交的版本号,改成想要的样子之后继续 git add
但是提交之后版本就多了一个merge提交 甚至别人的提交就变成你的提交了,如下staged中的修改其实并不是这次冲突的,但是提交之后最终就变成了本次提交的修改 所以需要合并提交
合并提交
查看版本可以选择复制版本号到 ···bash git log ···
使用“q”健退出git log
但是通常我们都是合并最近几次 1、举例合拼最近两次
git rebase -i HEAD~2
2、按“i”健进入编辑(跟vim的指令是差不多的,如果你会vim的话),根据提示改成下面,s代表融合到pick那次提交 3、按下Esc减退出,输入小写的":wq"(有个英文冒号),保存 4、如果要更改描述则继续 i :wq,如果不需要则:wq保存退出
5、最后执行git push
使用暂存来解决冲突
如果你已经知道了你跟别人修改了同一个文件,那一般是会存在冲突的,那你可以使用暂存来先解决冲突,然后再提交(因为合并提交实在是太麻烦了,所以多人开发时作者推荐是先暂存)
git stash
git pull origin two
git stash pop
git status
...
解决冲突
...
git stash clear
这个时候后只要解决冲突之后 add commit push就可以了 然后因为用冲突,pop之后stash里面的还是有内容 stash clear 一下
如果你的代码因为冲突导致了一些代码版本错乱了(l例如别人的代码明明你没改过却需要你来提交),那么可以选择回退版本,然后再使用暂存的方式解决冲突
回退版本与强制提交
有时候代码冲突了,不知道被改了什么或者是错误的提交,就需要回退版本,回退版本的思路是 log查看版本号–reset回退–commit提交–push强制推送
git log
git reset 版本号
git add .
git commit -m ''
git push -f
因为本地分支的版本远程的旧,pull会把远程的代码又更新下来,所以不能执行pull,但是不pull就部能push,会报错如下 回退软回退(–soft)跟硬回退(–hard),软回退更改的代码会退回到staged,硬回退就啥也没有了,所以别太硬
git reset --soft 版本号
git reset --hard 版本号
git reset --hard HEAD
git reset --hard HEAD~2
强制提交指令
git push -u origin master -f
git push -f
查看版本差异
用可视化工具吧,看多了眼睛会瞎
git diff --help
使用vscode的GitLens
不管用什么工具,其实原理都是指令的原理,无非就是add commit pull stash push vscode安装GitLens的方法,如下图搜索安装就行 不管是做什么语言开发,其实vscode都是一款不错的代码查看工具,比起Notepad++要好用得多,结合Project Manager插件作为一款代码管理工具是相当不错的(作者看java、python项目也是用vscode来看代码,不用学idea的git使用)
常规提交
步骤跟指令是一样的,不过改成了点击,看下图 步骤为 1、点击Changes上“+”号把所有变更都add一下 2、输入框内写提交信息然后点击commit,右边的下拉可以直接commit+pull,commit+push 3、点击SOURCE CONROL上刷新按钮执行pull 4、点击SOURCE CONROL上?
版本查看
GitLens 的提交版本查看,跟文件历史版本查看很有用,可以方便的知道谁在什么时候修改了什么,右键对比文件差异更是爽翻
git stash
stash直接看图吧,看不懂就算了 单个文件 多个文件,更多操作
解决冲突
快捷覆盖
右键某个文件 指令里讲了,head里面是本地的修改,就是current,可以右键选择“Accept All …”直接确认要使用本地的还是要用远程的,不用我们手动去对比
合并提交
右键选择COMMITS上你要合并的分支,最早的一次本地提交之前的那个
2、选择合并的方式,在下拉里面是可以输入的 3、最后一步比较坑, start rebase之后又变成了指令的模式了,还是一样的保存提交
使用暂存
跟指令一样的步骤,看上面的常规提交+git stash部分的图片自己尝试一下吧
回退版本
右键某个版本(可以省去git log然后复制版本号,美滋滋) 强推没找着在哪。。。用 git push -f
总结
作者最开始接触git用的是小乌龟,后面用了mac之后改用了Sourcetree(小乌龟只支持window),后面从sublime改用vscode后,发现vscode的GitLens也还不错,对于可视化工具,有些开发时嗤之以鼻的,觉得用命令行更加有逼格,但是作者只想说,人类的进步就是学会使用更加便利的工具。
作者现在的使用方式是命令结合VSCODE一起使用,毕竟有些git指令操作实在是太繁琐了,比如add特定的几个文件还得在终端里面挑文件,用vscode点一点就可以了。又比如解决冲突覆盖某个文件用“Accept All …”。但是单机开发常规提交直接 add commit pull push指令又更快。结合GitLens,就只要记住add pull commit push stash这五个指令就行。
最后的最后,如果是实在搞不清暂存、回退版本、合并提交,或者你本地分支的状态被你玩炸了,那你多clone一份远程最新的代码到另一个文件夹,再把你的现有代码复制过去看差异再提交也是不错的解决方式(重启能解决90%的问题dog,啥也不用背)
|