GIT学习笔记(6)

来源:互联网 发布:快乐十分选号软件 编辑:程序博客网 时间:2024/06/14 08:14

深入理解git checkout

git checkout 具体用法如下

git checkout [-q] [<commit>] [--] <paths> #1git checkout [<branch>] #2git checkout [-m] [[-b]--orphan] <new_branch>] [<start_point>] #3

用法1的commit是可选项,默认值为暂存区(git reset的默认commit是HEAD),所以git reset常用于重置暂存区,git checkout主要用于覆盖工作区。

第一种用法

不会改变头指针。 如果有commit参数会改变工作区和暂存区。无commit参数只会用暂存区覆盖工作区。

第二种用法

第二种用法会改变头指针。给定branch参数是因为HEAD要切换到另一个分支才能进行跟踪,不然会进入“分离头指针状态”。
省略branch参数则是对工作区进行状态检查。

第三种用法

第三种用法主要是创建和切换分支。新分支从start_point指定的commit开始创建。

示例:

git checkout branch2
1.将HEAD指针指向branch2
2.通过HEAD指针更新暂存区
3.通过暂存区更新工作区。

git checkout
汇总并显示工作区,暂存区和HEAD的差异。相当于git checkout HEAD

git checkout --filename
用暂存区文件替换工作区文件。

git checkout BRANCH --filename
不改变HEAD指向,从branch提交中找出文件并替换暂存区和工作区文件。

git checkout .
将工作区所有文件用暂存区替换。

恢复进度

通过git status -sb查看当前状态(-b参数 要求git version>= 1.7.2)

git stash

通过git stash来保存进度,通过git stash list来查看保存的进度。git stash pop从最近的进度中回复。
完整的git stash命令如下

git stash [save [--patch] [-k|--[no-]keep-index] [-q|--quiet][<message>]]

stash工作时,如需要说明,则需要git stash save 'message'
使用参数 --patch来查看工作区和HEAD之间的差异。
使用-k或--keep-index参数,在保存进度时不会将暂存区重置。
git stash apply [--index] [<stash>]与git pop相同,不同点是git apply不会在恢复完毕后删除被恢复的进度。
git stash drop [<stash>]会删掉这个stash。默认删除最新的stash。

git stash clear删除保存的所有进度
git stash branch <branchname> <stash> 基于进度创建分支

探秘git stash

git core文件存在于`git --exec-path`中。也就是/usr/lib/git-core。
ls /usr/lib/git-core会显示git所有子程序。在较早期的git版本,所有git子程序都保存在可运行目录中,用git-<cmd>调用。而较新的git使用了命令行git <cmd>



git stash是用引用变更和git reflog来实现的。
git reflog show refs/stash
会显示stash记录stash@{n},是refs/stash@{n}的简称。

git基本操作

rm和git rm

使用rm删除工作区文件,不会体现在暂存区中,而用git rm删除工作区文件,会显示在暂存区中

git add -u快速rm

使用rm等命令后,再执行git add -u会把被追踪的文件的增删改都增加到暂存区中。

原创粉丝点击