描述
这一篇文章全是精简的git命令和对应解释,不面向初学者。初学者十分建议去学习廖雪峰的git教程
镇图:
常用命令(应熟悉)
- 具体看下面一节,这里只是罗列,能进这个表很了不起
git log --graph git log --pretty=oneline git remote -v git checkout <branch名> git checkout <tag名> git merge dev git stash git stash pop git status git diff <文件名>
Git命令总结
1. 创建分支
-
创建分支(-b表示创建并切换)
git checkout -b dev 或者 git branch dev git checkout dev
两者是等价的,个人推荐后一种
-
查看当前分支
git branch
2. 合并分支
-
前提你在dev分支上的修改已经提交
git add <修改文件> git commit -m "change on dev"
来到master分支,并将dev上的修改merge到master上,这是一种Fast-forward的合并,直接将master指向了dev的当前提交
git checkout master git merge dev
-
合并分支的另一种用处不大,–no-ff参数,表示禁用Fast forward。master创建了一个新的commit,而不是master简单的指向了dev
git merge --no-ff -m "merge with no-ff" dev
-
删除分支
git branch -d dev
强行删除分支(dev分支add和commit过,但并没有和谁进行过merge)
git branch -D dev
3. Bug分支
- “暂停开发”(我自己起的名字)——把代码藏起来
git stash
- 查看有没有藏起来的代码——是不是有没恢复的现场
git stash list
- 把刚才还在开发的代码找回来
git checkout <你刚才开发的分支> git status // 你会发现代码竟然没有任何更改 git stash pop // 代码不在躲藏,回来了
4. 打标签Tag
- 给最新的commit打标签
git tag v1.0
- 给固定的commit打标签
git log --pretty=oneline // 查看以前的commit,找到你想要打标签的tag git tag v0.9 <commit号>
- 查看所有标签
git tag
- 查看tag那次的提交信息
git show v1.0
- 创建标签并备注
git tag -a v0.1 -m "version 0.1 的说明" <v0.1的commit id>
- 推送tag
git push origin v1.0
- 删除tag
git tag -d v1.0 //本地删除 git push origin :refs/tags/v1.0 //如果已经push了,除了本地删除再执行这句话
- 移动到固定tag下(git clone之后是有的,这一点和分支不一样)
git checkout v1.0
5. 合并冲突
- 假设在分支dev上修改了test.txt,在分支master上也修改了test.txt。两个分支上均进行了add和commit操作。
- 这时:
系统会提示冲突,用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,请你手动删除不需要的部分,保留需要的部分。修改完毕后git checkout master git merge dev
dev分支上的修改已经merge到了master上,可以删除dev分支了git add test.txt git commit -m "fixed conflict"
6. 提交修改
- 查看工作区和stage的差别
git status
- 查看文件哪里被修改了
git diff <文件名>
- 查看工作区和版本库里面最新版本的区别
git diff HEAD -- <文件名>
7. 撤销修改
- 还没有执行add命令,放弃上一次add后对某个文件的修改
或者,执行了add命令后再次更改,放弃add命令之后的修改git checkout -- <文件名>
- 已经执行了add命令,放弃某个文件从上一次add到这一次add之间的修改
git reset HEAD <文件名> // 撤销这次缓存区的更改(从缓存区给我吐回工作区) git checkout -- <文件名>
8. 删除文件
无论你是使用右键删除还是rm删除文件,你都需要重新使用git完成删除,不然git怎么知道你删的对不对
所以我建议如果想删除某个文件,请使用git rm
- 从版本库中删除该文件
git rm test.txt git commit -m "rm test.txt"
如果你误删了某个文件(git rm),但是这次删除还没有commit,版本库中是有这个文件的,这时还有的救
- 从版本库中重新恢复误删的文件
git reset HEAD <文件名> // 撤销这次缓存区的更改(从缓存区给我吐回工作区) git checkout -- <文件名>
如果你误删了某个文件,但是这个误删的文件,版本库中是从来没有commit过的
- 你只能去回收站碰碰运气了
9. 版本回退
- 显示从最近到最远的提交日志,看到3次提交
git log
- 清晰显示提交日志
git log --pretty=oneline
- 回退上一个版本,上上个版本使用HEAD^^
git reset --hard HEAD^
- 回退到之前的某个版本
git reset --hard <你想要回退的版本号>
- 查看之前的全部git命令,每一行命令前面的一串十六进制数字是版本号
git reflog
10. 多人或多电脑协作
-
克隆远程仓库下来后,是看不到master以外的分支的。创建远程的dev分支到本地(本地dev在执行这个命令之前是不在的)
git checkout -b dev origin/dev
-
将远程仓库的dev分支与本地库的dev分支建立联系
git branch --set-upstream-to=origin/dev dev
这样你执行命令
git checkout dev git add <修改文件> git commit -m "备注" git pull origin dev git push origin dev
你在dev分支上,pull的是远程仓库的dev分支,push的是本地dev分支到远程仓库的dev分支上
-
无论你在本地的哪个分支上,你都能pull和push。假设你已经按照上一步完成了分支联系的建立,下面代码的效果是这样的
git pull origin dev // 远程dev 拉到 本地dev git pull origin master // 远程master 拉到 本地master git push origin dev // 本地dev push到 远程dev git push origin master // 本地master push到 远程master
11. 下拉远程分支
- 下拉远程分支
git fetch origin [远端分支名]
- 切换分支
fetch后是不会显示新拉下来的分支名的,但是已经可以切换了git checkout [新拉下来的远端分支名]
最常用的写在最后面
1. 版本推送
git add <修改的文件1> <修改的文件2>
git commit -m "备注"
git pull origin master
git push origin master
2. 版本克隆
git clone <远程仓库网址>
3. 设置远端网址
git remote add origin <远端仓库网址>