简介:本文章注重与实际和理论相结合,简述Git在实际工作的常用操作,以及工作流程。
(一)Git本地仓库
1、git的结构
理解git的结构是本文的重点之一,是作为git操作命令和git工作流的基础。
Git结构图
如图所示:本地git分3部分,第一部分工作区(work),也是就我们的本地工作文件夹。第二个就是暂存区(stage/index),第三个就是我们的本地分支。
例如 git add ./ 就是把所有本地工作去的文件添加到暂存区,而git commit -m “提交” 这个命令就是把暂存区的文件全部提交到本地分支,最后git push 就是把本地的分支推送到远程分支。
下面我们就用sourceTree 形象的表象给大家看
当我们在文件夹中(工作区),新增一个陆雪琪的txt。那么sourceTree软件中的工作副本变化就出现了陆雪琪。
命令查看 untracked files:就是没有追踪的文件意思,说是没加入了暂存区。没版本控制的意思
然后我们执行命令 git add ./ ,就是把工作区的文件提交到暂存区里面。如图所示:陆雪琪就去到了暂存区里面了(暂存区的变化)
再看看命令 git status:陆雪琪文件已经变绿了,文字也变成 changes to be committed ,意思就是文件已经提交到暂存区,但是还没提交到本地分支
然后我们 在执行命令 git commit -m “提交”,这个时候就是把暂存区的文件提交到本地分支。如图所示:暂存区的陆雪琪不见了,然后提交那里有一个1,就是说本地分支有一个更新还没提交到远程仓库。这个时候,只要我们git push 就可以推送到远程了。
2、git还原机制
- git revert 是生成一个新的提交来撤销某次提交,此次提交之前的commit都会被保留
- git reset 是回到某次提交,提交及之前的commit都会被保留,但是此次之后的修改都会被退回到暂存区
我分别提交了3次修改如图所示
首先我利用git revert 回滚到第一次修改,如图所示:第二,第三次修改都没有消失,而是直接生成一个新的提交(未提交新的更改:意思就是一个新的commit),至于冲突解决这里不是重点就不说了(可以看我上一篇文章)
然后我利用git reset 回滚到第一次修改,如图所示:第二,第三次修改都消失了。
git reset –soft (默认值)
–soft 这意味着index(暂存区),working copy(工作区)都不会做任何变化,这是head指向 还原的 commit (id),即系分支还原成 commit (id)的分支。
git reset –hard
–hard 工作区,暂存区,和本地分支都还原成 commit (id)那个分支了(HEAD指向 commit (id)那个分支了)
git reset –mixed
working copy(工作区)不会做任何变化, index(暂存区)还原成commit (id)的内容。这是head指向 还原的 commit (id),即系分支还原成 commit (id)的分支。
这里补上2张sourceTree命令关系图
送上一张Git命令图
http://josh-persistence.iteye.com/blog/2215214
http://www.cnblogs.com/kidsitcn/p/4513297.html