2017总结之GIT

从去年下半年开始就一直在使用 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

把当前分支推送到 originmaster 分支

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 指针变化的历史,方便做一个恢复的工作。