git学习笔记(一)
一、git初始化
1)告诉git当前用户的姓名和邮件地址,配置的用户名和邮件地址将在版本库提交时用到。
git config --global user.name "name" git config --global user.email "email"
删除设置:
git config --unset --global user.name
2)设置git命令别名
sudo git config --system alias.cm commit sudo git config --system alias.ck checkout
3)开启颜色显示
git config --global color.ui true
4)初始化版本库
git init
产生.git/,当git在工作区的某个子目录下执行操作时,会在目录中向上递归查找.git/,找到的.git/目录就是工作区对应的版本库
.git目录就是工作区的根目录。
5)将新建的文件添加到版本库
git add h.txt
6)提交文件
git commit -m 'root commit'
7)搜索文件内容
git grep 'content'
8)git的三种配置文件
版本库级别:.git/目录下,使用git config命令
全局配置文件:用户主目录下,使用 git config --global
系统级别配置文件:/etc目录下,使用git config --system
配置文件为ini文件
读取配置文件内容:
git config <section>.<key>
如读取core小节的bare值
git config core.bare
更改值:
git config <section>.<key> <value>
9)备份
git clone demo demo-backup
二、git暂存区
注意:git diff系列命令如果单纯创建文件,则没有输出
git diff:工作区和暂存区比较
git diff HEAD:工作区和HEAD比较
git diff --cached:工作区和暂存区比较
git add操作:暂存区的目录树被更新,同时工作区中被修改的文件内容被写入到对象库中的一个新对象中,
而该对象的ID被记录在暂存区的文件索引中。
git commit操作:暂存区中的目录树会被写入到版本库中,master分支会做相应的更新。
git reset HEAD操作:暂存区的目录树会被HEAD指向的目录树所替换。
git rm --cached <file>操作:从暂存区删除文件
git checkout -- <file>操作:用暂存区文件替换工作区文件。
git checkout HEAD . 或 git checkout HEAD <file>:用HEAD中的文件替换暂存区和工作区中的文件。
git stash:取消工作区和暂存区的改动。
三、git对象
显示对象ID类型:
git log --pretty=raw --graph
git cat-file -t id
git cat-file -p d957f52daf4fd45
100644 blob 0115e90bff91d29ddc2711c1cb0e59ba916fac44 h.txt
对象类型有:commit, tree,blod.
其中blod对象保存这文件内容,id的前两位为目录名,后38位为文件名。
符号^可用于指代父提交
HEAD^表示HEAD的父提交
HEAD^^表示HEAD^的父提交
对于一个提交有多个父提交,可在^后面用数字表示第几个提交,如:
HEAD^^2表示HEAD^的父提交中的第二个提交
提交所对应的树对象:
a3f2342^{tree}
四、git重置
将master重置到父提交
git reset --hard HEAD^
重置到相应id提交
git reset --hard id
注意:使用重置命令很危险,会彻底地丢弃历史。
但可以通过reflog命令找回
git reflog show tang | head -5
git reset --hard tang@{1}
git reset命令用法:
用法一:git reset [q] [<commit>] [--] <paths>...
其中<commit>是可选项,可以使用引用或者ID,如果省略<commit>则使用HEAD指向作为提交的ID。
该用法不会重置引用更不会改变工作区,而是用指定提交状态(<commit>)下的文件(<paths>)替换掉暂存区的文件。
例如,命令 git reset HEAD <paths>相当与取消之前执行的 git add <pahts>命令时改变的暂存区。
用法二:git reset [--soft | --mixed | --hard | --merge | --keep] [-q] [<commit>]
该方法会重置引用,根据不同的选项可以对暂存区或者工作区进行重置。
1)参数--hard:如 git reset --hard <commit>
该操作会使用<commit>
1.替换引用的指向
2.替换暂存区
3.替换工作区
2)参数:--soft:如 git reset --soft <commit>
只会替换引用指向
3)参数:--mixed(或者不使用参数):如 git reset <commit>
更改引用指向和暂存区,不改变工作区
4)命令:git reset -- filename
仅将文件filename的改动撤出暂存区
五、git检出
查看当前分支:git branch -v
关于分离头指针状态,略
git checkout 命令:
git checkout 命令用于重写工作区,所以请谨慎使用。
用法一:git checkout [-q] [<commit>] [--] <paths>
<commit>是可选项,从<commit>检出覆盖工作区和暂存区的文件,省略则从暂存区检出,该用法不会改变HEAD头指针,
<paths>主要用于版本的文件覆盖工作区的文件,省略则用暂存区文件覆盖工作区的文件。
用法二:git checkout [<branch>]
该用法会改变HEAD头指针,该用法的主要作用是切换到分支。
用法三:git checkout [-m] [[-b | --orphan] new_branch] [<start_point>]
用于创建并切换到新分支,新分支从指定的提交[<start_point>]开始创建。
用法四:git checkout 或者 git checkout HEAD
显示工作区、暂存区与HEAD的差异。
六、恢复进度
1.git stash save 'comment':保存当前工作区和暂存区工作进度,此时工作区和暂存区退回到上次commit状态。
2.git stash list:查看当前工作进度表。
3.git stash pop [--index] [<stash>]:
如果不使用参数,则从最近一次保存恢复。并将恢复的工作进度从工作进度表中清除。
如果提供<stash>参数(该参数从git stash list中获得),则恢复该进度并删除。
4.git stash apply [--index] [<stash>]:除了不从工作进度表中删除恢复的进度外,其余与上条命令一样。
5.git stash drop <stash>:删除一个工作进度
6.git stash clear:删除所有工作进度
注意:本地没有被版本控制系统跟踪的文件不能保存进度,即保存进度前要先执行add操作。