分区

本地 Git 的三个分区分别是:working directory, stage/index area, commit history

working directory

working directory 是工作目录,也就是肉眼能看到的文件。

stage/index area

当在 work dir 中执行 git add 相关命令后,就会把 work dir 中的修改添加到暂存区 stage 中去。

commit history

stage 中存在修改时,使用 git commit 相关命令之后,就会把 stage 中的修改保存到提交历史 (commit history) 中,也就是 HEAD 指针指向的位置。
任何修改只要进入 commit history,基本可以认为永远不会丢失了。每个 commit 都有一个唯一的 Hash 值,常说的 HEAD 或者 master 分支,都可以理解为一个指向某个 commit 的指针。

working directorystage/index area 区域的状态可以通过命令 git status 来查看,commit history 区域的提交历史可以通过 git log 命令查看

需求

把 work dir 中的修改加入 stage

使用 git add 相关命令就行。add 还有个别名叫做 stage,这个命令和 add 命令是完全一样的。

把 stage 中的修改还原到 work dir 中

使用 git checkoutcheckout 命令只会把修改的文件恢复成stage 的状态,如果 work dir 中新增了新文件,使用 git checkout 是不会删除新文件的。

将 stage 区的文件添加到 history 区

使用 git commit -m '一些描述'。如果发现一些错别字需要修改,又不想为改几个错别字而新开一个commithistory 区,那么就可以使用 git commit --amend。这样就是把错别字的修改和之前的那个 commit 中的修改合并,作为一个 commit 提交到 history 区。

将 history 区的文件还原到 stage 区

使用 git reset 命令可以把文件从 stage 区移出,这时候进行 git commit 相关的操作就不会把这个文件一起提交到 history 区。

将 history 区的历史提交还原到 work dir 中

如果想将项目回到某个指定的版本,可用 git checkout HEAD .(回到最新的版本) git checkout xxxxxx .(回到历史版本)

合并多个 commit

如果本地从 17bd20cHEAD 有多个 commit,但希望把他们合并成一个 commit 推到远程仓库,这时候可以使用 reset 命令。

$ git reset 17bd20c
$ git add .
$ git commit -m 'balabala'