概念介绍
- 工作区:为本地环境,用户平常改动的位置即为工作区。
- 暂存区(stage):即为图3-1中的index,用户使用git add命令将工作区待提交的文件提交的位置即为暂存区,暂存区的意义在于用户可以将一次需要提交的文件先放置于暂存区中,方便后续向版本库进行提交。
- 本地版本库:即为图中的master,用户使用git commit –m命令将暂存区的表更上传到当前分支上。
- 远程版本库:即为Git的远端版本库,用户使用git push将本地版本库的变更上传到远端服务器中。
- HEAD:可以理解为“头指针”,用于表示当前工作区所处的分支,在执行提交时,默认提交到HEAD所指的分支上,并将HEAD所指位置更新到最新提交。
- Stash:可以获取工作区的中间状态(工作区修改过的被追踪的文件和暂存的变更)并将其保存到一个未完结变更的堆栈中,随时可以重新应用。
- 里程碑(Tag):即人为对提交进行的命名,例如:以“v1.1”对提交进行命名,能够直观的表达的进度以及版本。里程碑与提交说明是不同的,提交说明是指git commit时附带的说明,表示当次提交所修改或增加的内容。
图 1-1 Git 工作区、版本库、暂存区原理图
Git 克隆远端版本库:
- git clone <repository> <directory> //将远端版本库中的内容复制到本地。
repository: 表示远程版本库的地址或名称。
directory:表示需要将版本库克隆到本地的路径。
Git 提交常规流程:
- git add *.file //选择待提交文件,将工作区文件提交到暂存区。
- git commit –m “commit message.” //将暂存区提交到本地版本库。
- git push [branch] //将本地版本库提交到远程版本库中,不带分支参数的推送即推送到当前分支的远程版本。
Git 里程碑:
- git tag //显示当前版本库的里程碑列表。
- git tag <tagname> [<commit>] //为commit提交创建名为tagname的里程碑。
Git 拉取命令:
- git pull <remote> <branch>:<local-branch>
将远程主机remote的branch分支的变更取回到本地,并与本地local-branch分支合并。
git pull = git fetch + git merge
git fetch <remote><branch> //从远程主机remote的branch分支的变更取回到本地,不进行合并。
Git merge<local-branch> //将从远程分支拉取的内容合并到local-branch本地分支。
Git 切换分支
- git checkout <branch> //切换到branch分支中。
- git checkout -b <branch> //创建branch分支,并切换。
- git checkout --track <romote/branch> //创建branch分支,并跟踪远端branch分支,本地切换到branch分支上。
Git 重置命令:
- git reset [--hard|--mixed|--soft] [<commit>]
git在本地的整体结构分为三层,即工作区、暂存区、本地版本库。
--soft 改变版本库分支指针的指向位置。
--mixed 改变分支指针的指向位置,并重置暂存区,使暂存区与分支指针所指的目录树一致。
--hard 改变分支指针的指向位置,重置暂存区,并将工作区版本回退到与暂存区一致,之前在编辑区编辑的内容将被清空(注意保留存档),也和分支指针指向的目录树一致。
<commit> 用于标示所要重置的指针位置,可以为提交ID,即将分支指针指向提交ID,也可以为HEAD[*]^,其中*可以为数字,也可以为多个^,代表指针从当前HEAD所指位置回退多少步。
git reset -- filename //仅将文件filename的改动撤出暂存区,相当于git add filename的反向操作。
Git补丁导入导出:
- git format-patch –s <commit_from>..<commit_to> //表示将commit_from到commit_to之间的提交都导出为补丁,包含commit_from和commit_to两次提交。
- git am *.patch //使用通配符将所有补丁应用到当前分支中,或可以输入补丁文件名将单一补丁应用到当前分支中。
Git查看类命令:
- git diff //工作区和暂存区的比较。
- git diff --cached //暂存区和HEAD比较。
- git diff HEAD //工作区和HEAD比较。
- git status //列出当前目录所有还没有被git管理的文件和被git管理且被修改但还未提交(git commit)的文件。
- git branch [-r] [-a]
无参数 列出本地所有分支,“*”表示当前所在的分支。
-r 列出远程分支。
-a 列出所有分支,包括本地分支和远程分支。
- git remote [-v | --verbose]
无参数 列出已经存在的远程分支。
-v|--verbose 列出所有远程分支,在每个名称后显示其远程URL。
Git缓存
- git stash save "message" //用于将工作区的文件变动添加到stash,储藏的文件范围为git本地版本库所记录的文件。执行完成后工作区恢复到未改动的状态。
- git stash save -a "message" //用于将工作区的文件变动添加到stash,储藏的文件范围为工作区所有文件变动,包括git本地版本库未记录的文件。执行完成后工作区恢复到未改动的状态。
- git stash pop //恢复最近的一次储藏。
- git stash list //查看stash内所有的储藏,显示内容包含stash编号、储藏提交点,储藏信息。
- git stash pop stash@{id} //恢复编号id的储藏。
- git stash apply stash@{id} //恢复编号id的储藏。
- git stash pop stash@{id}命令会在执行后将对应的stash从stash list里删除,而git stash apply stash@{id} 命令则会继续保存。
- git stash drop <stash@{id}> //删除stash内编号id对应的储藏。如果不加stash编号,默认的就是删除最新的,也就是编号为0的stash。
- git stash clear //清除所有的stash