相信小伙伴们对git不陌生吧,但是究竟git是怎么样工作的,它的构成又是怎么样的呢?我们来看看:
上图很明显的说明,git是又4个部分组成的:
工作区域--add-->暂存区域--commit-->本地版本仓库--push-->远程版本仓库
基本指令
1. add
虽然网上是如上这么说,但是我试过好像git add . 和git add -A 效果是一样的。
2.commit
commit -m:把暂存区的内容提交到本地版本区
commit -a -m:相当于git add -u和git commit -m组合
3.log
可以查看每个commit的版本号:
4.reflog
和log很像,比log能看得更多,git reset也可以看到
5.reset
reset: "git reset --hard 版本号" 执行这句就可以回滚代码回到对应的版本了,我们常用回滚本地分支的代码
其中版本号是上面红框的随机字符串,和git log的commit右边的字符串,一般取开头的几位就ok了
例如git reset --hard ad208
6.revert
revert:也是回滚版本,不过只是回滚代码,不回滚版本号,我们常用这个来回滚已经提交上远程分支的代码
例如:git revert 版本号
ps:我们更多的会用到revert来回滚代码,如果用reset来回滚,很容易导致和远程分支发生冲突
当然我们revert后,通常会先commit然后pull一下代码来merge一下
7.checkout
checkout(checkout的本质其实都是checkout hash):
git checkout master // 切换到master分支 git checkout tag123 // 切换到tag123这个标签对应的commit节点(注意:这样切换后,就不属于任何分支了,因为tag是只读的) git checkout <hashStr> // 切换hash字串对应的某个commit节点(跟标签一样,这样切换后,就不属于任何分支了,因为tag是只读的) git checkout 'ab30292fd7bab6beb46' -- package.json // 只把某个文件切换到某个commit节点的状态 git checkout 'ab30292fd7bab6beb46' -b feat-new-branch // 从某次提交,创建新分支
checkout -b:
git checkout -b aaa // 从当前节点,创建并切换到aaa分支
新建的本地分支push到远端:
git push --set-upstream origin [新分支名]
8.merge
merge: merge aaa 合并aaa分支的代码
9.branch
branch: 列出本地分支
branch -r:列出远程分支
branch -a:列出全部分支
branch haha:创建叫haha的分支
branch -D haha:删除本地分支haha
branch -D -r origin/haha:删除远程分支haha
10.clone
git clone xxx.git "指定目录" :克隆远程仓库代码到指定目录
ps:上面所说的版本号可以是git reflog或者git log的版本号,也可以是某一个branch的名字或者head[~number]
回滚代码的总结:
- 自己的分支回滚直接用reset
- 公共分支回滚用revert
- 错的太远了,只能手动修改
10 .stash
git stash 暂存本地修改
git stash pop 本地修改恢复到工作区
git stash list 查看暂存区数据
git stash pop stash@{idx}
11. remote
git remote show origin 查看远端分支情况(包含和本地分支的关系)
git remote prune origin 删除本地对应远端已删除的分支
git remote add 名字 git@git.xxxx:xxx/xxx.git 添加远程仓库
git remote -v 显示对应的克隆地址
12. 批量删除branch(利用linux的grep工具)
git branch |grep "bugfix" |xargs git branch -d
13.让分支指向某次提交
git branch -f dev [hash]
14. 修改历史
推荐阅读:Git 工具 - 重写历史