原创:http://blog.sina.com.cn/u/2312748742 在此特别感谢小布老师的帮助。
1)git config --global user.name /user.email +用户名/email
2)git init 初始化git,新建仓库。
3)git log 查看日记。git log -p,详细日记。
4)git status 查看状态
5)git add . 要提交的文件。 .为这个文件夹
6)git commit 真正把要提交的文件保存到仓库中。
前面两个命令可以用 git commit -a -m"信息"
7)git branch 创建分支
8)git checkout experiment 切换分支 。接下去在这个分支工作。。。。。。
9)提交分支工作,并且切回到主干。
10)git merge experment 合并分支到主干。
11)git branch -d experiment 删除分支。
12)git ls-files --deleted 查看删除的文件
13)git checkout test/ 恢复文件
14)git diff 比较差异
15)git revert恢复到之前的索引。
例子:
16)当git add .后又不想放到缓存了。想撤出怎么办:
使用git reset HEAD<那个文件名> 。可以用giestatus查看。
17)当改了一些文件后想返回怎么办,输入 git status可以看到有改过的文件会出现Changed but not updated ,此时如果你不想改了,可以gitcheckout --<file> ,返回。此命令是把原来的版本覆盖过来。
18)当git commit -m "信息" ,当不要了这个怎么办,使用 git rest --soft HEAD^此命令会把git log里的记录返回到之前的,也可以用git commit -a -c ORIG_HEAD 重新再定义信息。
git原理分析:
.git仓库里其实有branches/config/description/HEAD/hooks/info/objects/refs
1)git采用有改变就保存起来,没有采用什么修改算法等。
2)git可以用--globle保存全局的个人消息。也可以用 .git/config 里的局部消息
3)有三个地方,一、git init后有一个.git这个就是Repository放保存的仓库。
4)二、working directory 工作区
5)三、staging area/index缓存区。
6)上面三个顺序,二 -> 三 ->一 ,其中 二到三 用git add 三到一 用gitcommint 。如果也可以用 git commint -a 来让git 自己执行 二到三
7)从仓库里取出来恢复文件 用 git checkout -f HEAD , 只要.git这个仓库不丢失,其它工作区的文件无所谓。
8)git其实有三个对象,这个是git的核心。 first :blob,这个是叶子,真正的文件。second :tree,树,其实这个就是目录,它指向了blob,third:commit,这个是历史记录的。没commit一次,就有一个,它指向tree.
9)git hash-object <file>,这个是HSA1值,哈希值,它代表file。
10)find .git/objects/ -type f 列出普通文件
11)git show <哈希值> 。可以显示文件内容。
12)git cat-file -t <哈希值>。显示文件时tree还是 blob 或者 commit.
13)tree 对象。有 blob/tree 。 gitls-tree <哈希值>
14)git保存的原理它内容和文件名是分离的,如果内存相同而文件名不一样,则它只保存一份内容。文件名称由tree保存。
15)commint对象: 里面有tree/parent/auther/commiter 用git show -s -pretty =raw <哈希值>
16)blob对象。正真的文件。压缩成哈希值作文件名称。
17)tag对象也可以称另一个对象。它是标签。用在 commit -m “标签” 。
18)References 引用、有 HEAD,branches .romote brach
19) 打入标签; git tag V1.00.00.01 或者创建标签对象 。 gittag -a <标签名> -m "描述信息"
20)查看标签: ls .git/refs/tags/
21)提取之前的版本。
cat.git/HEAD 看他的头指向哪里
cat.git/resf/heads/master
cat .git/refs/tags/
提取对应的版本并压缩:
git archive --format=tar--prefix=/<gitspace存放文件夹> V1.0(标签) |gzip >/workspace/kylin/v1.0.tar.gz
22)用 git checkout v1.0 ./ 其实同上,它是先去找.git/refs/tags/v1.0 找到这个记录的希哈值。通过这个希哈值找了tag标签,标签就指向了commit ,commit指向了tree,tree指向了blob,因此就都找到了。
23)合并冲突后应手动去更改,然后再主分支上commit一次即可。
24)合并后要删除分支:git branch -D testing
25)有些不想放到仓库里应该用 .gitignore 文件,然后把不想放仓库的文件名写到.gitignore里面
26)git diff --staged 或者git diff 比较workspace VS staged
27) git diff --cached: 比较 staged VS local reperety
28)删除git rm <文件名>
29) git reset --head <commit 名>恢复到哪个版本 缓冲区,工作区,heard都没了。还原到原来的版本
①替换引用的指向。引用指向新的提交ID。
②替换暂存区。替换后,暂存区的内容和引用指向的目录树一致。
③替换工作区。替换后,工作区的内容变得和暂存区一致,也和HEAD所指向的目录树内容相同。
30)git reset 表示撤销缓存区。 (默认为--mixed),更改引用的指向及重置暂存区,但是不改变工作区
31) git reset --soft <commit名> 只更改引用的指向,不改变暂存区和工作区.
32) git 不同节点的某一个文件的比较: git diff 26665422dd22 s225df5585x222 -- aa.c