——前言
作为一个资深的sourcetree用户(git可视化操作工具),平时对git命令行命令用的少之又少。基本就是clone,pull,add,commit,push.无非也就是这些。(一般合并,解决冲突都是结合可视化工具的)。我觉得可能是我对自己工具人属性的过于肯定。我就在简历上面写了熟练使用git进行版本操作。这可坑惨了自己。
真实尴尬小剧场
-
面试官问:假如你在add,commit之后发现自己提交的内容不太好,想要返回修改怎么办。
-
我? 那我直接在修改一次add,commit不就行了?
-
面试官看了我一眼笑了笑,那你就不害怕留下记录,被当成bad case在大会上点名’表扬‘吗?
-
我。。。。。。
(ps:后面我补了补,只要git checkout . 将本地库中的提交返回工作区去修改就行了。)
—— (脑补面试官追问,要是已经push到远程分支呢? git reset 我强制删除提交分支,不留痕迹。什么太暴力了,那git revert回滚给自己留有余地)
下面正式介绍一些常用git命令,让你摆脱一个工具人的名号
如图所示:
首先下拉代码
git clone +仓库地址,可以将远程仓库克隆到本地(当然合作开发需要权限),后续更新代码只需要git pull 即可。
git pull 下载代码和工作区代码快速合并。 (相当于git fetch + git merge)但是后者比较合理可以比较之后合并,前者的话,易出现冲突。需要手动去解决
补充一下fork
git fork 也有拉取的含义。不过具体一点说,它相当于在你的github 远程仓库里复制了一份别人的仓库 此时你在git add, git commit ,git push 是修改你自己远程仓库里面的代码。如果想要修改原仓库需要pull request ,原仓库主人就会收到请求,并决定要不要接受你的代码
如上图 就有一个fork按钮也是这个作用。
设置配置
- git config [--global] user.name "[name]"
- git config [--global] user.email "[email address]" 用来标记你个人信息,防止你瞎改一通之后找不到人。(小心一点,你被👀着的)
提交三大流程
- git add. 追踪工作区的代码(只有add后才能commit)
- git commit -m "补充说明信息" 上传暂存区代码到本地工作区
- git push 上传本地工作区代码并快速合并
git status 查看修改情况
冲突
一般情况下,出现分支的场景有如下:
- 多个分支代码合并到一个分支时
- 多个分支向同一个远端分支推送
需要手动在文件中解决。如图所示,选择Accept current change (接受本次修改),Accept incoming change(接受传入的修改) 或者手动合并两者。然后保存修改 ,继续add commit push上传。
(ps:合作开发时候,每次push之前一定要先pull ,拉一下代码,解决一下冲突。千万不能暴力上传)
撤销
- git checkout [file] 恢复暂存区的指定文件到工作区
- git checkout [commit] [file] 恢复某个commit的指定文件到暂存区和工作区
- git checkout . 恢复暂存区的所有文件到工作区
- git revert 保留之前的提交记录 (也就是说,万一你是一个小马虎,revert之后发现没错,是后端错误,你还可以继续在回去上一个版本)
- git reset 相当于直接删除本版本,回归上一个版本。
暂存
-git stash 对工作区代码暂时保存。 这是一个非常实用的功能,只是很可能被忽略掉。
举个🌰
你开发一个大项目到一半,突然线上有个临时bug要修复,但是代码还不想进行提交,这时候可以运行git stash 进行暂存,工作区会恢复到上次提交前的状态。 然后我们就可以新开分支修复bug。待一切完成 之后 git stash pop 拿回记录继续开发。当然如果此期间修改了同一文件需要手动解决冲突。
关于git stash
常见的命令如下:
- git stash 暂存
- git stash list 查看本分支所有暂存代码
- git stash pop 后加stash的name 取出对应的暂存。(name一般自动命名,如下图形式)
- git stash apply 应用某个暂存与pop 不同的是pop后会从list中消失
- git stash drop 后加name 删除某个暂存
- git stash clear 删除所有暂存