git学习笔记(一)

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操作。

Simple is important!
原文地址:https://www.cnblogs.com/Shadowplay/p/9608232.html