从去年下半年开始就一直在使用 SourceTree
一些常用功能在图形化的界面里显的更直观。但是在处理一些复杂操作时似乎对 git 的命令了解的越透彻越能快速的解决问题。所以还是把快要生疏的命令拿出来理理吧。
基本原理
大多数命令都是在这三者之间工作。
其中仓库是一个个提交的节点前后串联,并且有各种指针来表示不同的演进历史,也就是分支。不同的文件状态是由索引与工作目录的差异造成的。
- 工作目录 (Work Directory)
- 缓存区 (Index)
- 仓库(History)
看这样的图解GIT会理解的更好。
一些基本命令
git checkout dev
从当前分支切换到 dev
git checkout -b featrue/foo
创建一个新的分支,并切换到这个分支里
git checkout –track origin/bar
在本地创建一个 origin/bar
的跟踪分支
git add .
添加当前目录下所有文件到 index
git add foo.js
添加 foo.js 到 index
git commit -m ‘message’
提交一个 commit 到当前分支中
git commit -am ‘message’
提交一个 commit 对象到当前分支,并且把目录中没有 add 的跟踪对象 tracked file
一起提交。注意:不包括未跟踪的对象 –all
git commit –amend
运行一次 add
动作并把这次提交的文件及信息添加到上一次的 commit 对象中,其实就是丢弃上一次的提交
git push origin master
把当前分支推送到 origin
的 master
分支
git push origin :featrue/foo
注意 :
前是有一个空格的,这样的提交会删除远程分支
git log
查看当前分支的日志情况
git log -2
查看当前分支日志的前两条
git log -p -1
查看当前分支日志的第一条,及它的修改内容
git log -p –graph – file.js
图形化的方式显示日志
git branch -d [branch name]
删除一个本地分支
git push origin [注意这里有一个空格]:[remote branch name]
删除服务端分支
git branch
查看所有仓库所有分支
git branch -vv
查看本地分支的更多详情,了解本地分与远端的关系
git stash save
把当前的未跟踪修改保存起来
git stash pop
把保存的修改恢复到当前分支
git merge origin foo
把 foo
分支合并到当前分支中
git merge origin foo –ff-only
只能以快进 fast-forward
的方式合并,分叉了就不行了。
其它还有 --ff
--no-ff
高级 - 撤销
git checkout – foo.js
从缓存区恢复这个文件
git checkout HEAD – foo.js
从 HEAD 指向的历史记录中恢复这个文件,并且把 缓存区一起恢复
git reset – foo.js
同上
git reset –hard HEAD
从 HEAD 把工作区加缓存区都一起恢复
git reset –soft HEAD~
只是让本地的 History 回到上一次 commit 状态
git reset HEAD~
让本地 History 回到上一条 commit 状态 并且把 Index 恢复,但不管 Working Directory
高级 - 恢复
git log -p – [filename]
查找已经删除的文件
git log -g
当分支意外删除时,可以加 ‘-g’ 找到最后一次提交的 commitID,然后从这个commitID 恢复一个新的分支出来
git reflog
可以查看 HEAD
指针变化的历史,方便做一个恢复的工作。