find .git/objects
查看当前目录下文件列表git hash-object -w --stdin
此命令为获取你提交的内容,然后仅返回哈希值,-w
代表的是不仅仅返回值,还要讲其写入到数据库中,- -stdin
选项则指示该命令从标准输入读取内容;若不指定此选项,则须在命令尾部给出待存储文件的路径git cat-file -t <哈希值>
查看文件类型,git cat-file -p <哈希值>
查看文件内容find .git/objects/ -type -f
查看当前目录下所有的文件和哈希值git cat-file -p <40位哈希值> > 文件名.后缀
此操作可以将丢失的文件恢复,例如
git cat-file -p 5f2f16bfff90e6620509c0cf442e7a3586dad8fb > uisee_1.txt
git add *.c/ *.txt
添加一些文件到暂存区中git commit -m 'the first version'
提交文件,后面是提交的名字git clone <网址>
克隆github上的项目到本地git clone <网址>
` 克隆github上的项目到本地制定文件夹名字的目录git status
查看当前的git的信息git status -s
状态简览touch .gitignore
创建忽略文件,把不想存在暂存区的文件后缀添加到此文件中git diff
查看尚未暂存的文件更新了哪些部分git diff --staged
比对已暂存文件与最后一次提交的文件差异git diff --cached
已经暂存起来的变化git commit -a
跳过暂存区直接提交git rm a.txt
直接删除文件git rm -f a.txt
删除暂存区的文件,防止没有暂存的文件误删除git rm --cached a.txt
删除git目录中文件a.txt的索引,但文件还存在于本地磁盘中git rm uisee/seed/\*.log
删除路径uisee/seed/下的所有后缀为.log的文件git mv a.txt b.txt
修改文件名a.txt为b.txtgit log
查看提交历史记录git log -p -2
查看最近两次提交的记录的详细改动git log --stat
查看简要的提交信息git log --pretty=oneline
以行的形式显示提交信息,只包括哈希值和提交备注信息,例如
> 5f8682f7b3bb6a5fe64bc4a6904421b22607a9ea the seconde update
> 2fefe571fc2f4fadac0a6d4cf62469d068b44d30 update
> eb6dfbaf646f9dbe6d428ddcf3458fc6faaebaa8 the forth version
> abb4f59904394c11eee6e11c437b1a33af22eb37 a.txt
> b15e5aa077614f654a3bad98b1513e26ea7d443f the third version
> 0131770cc1962d980f8fe1e99d0db631830e5835 the second version
> ef8b3466ee8e68ec2e158eedaa992520a0a7f988 the first version
git log --pretty=format:""%h - %an - %ae - &ad - %s"
输出定制的提交信息格式
5f8682f - zzc10402 - zhichen.zhang@uisee.com - &ad - the seconde update
2fefe57 - zzc10402 - zhichen.zhang@uisee.com - &ad - update
eb6dfba - zzc10402 - zhichen.zhang@uisee.com - &ad - the forth version
abb4f59 - zzc10402 - zhichen.zhang@uisee.com - &ad - a.txt
b15e5aa - zzc10402 - zhichen.zhang@uisee.com - &ad - the third version
0131770 - zzc10402 - zhichen.zhang@uisee.com - &ad - the second version
ef8b346 - zzc10402 - zhichen.zhang@uisee.com - &ad - the first version
选项 说明
%H : 提交的完整哈希值
%h: 提交的简写哈希值
%T: 树的完整哈希值
%t: 树的简写哈希值
%P: 父提交的完整哈希值
%p: 父提交的简写哈希值
%an: 作者名字
%ae: 作者的电子邮件地址
%ad: 作者修订日期(可以用 --date=选项 来定制格式)
%ar: 作者修订日期,按多久以前的方式显示
%cn: 提交者的名字
%ce: 提交者的电子邮件地址
%cd: 提交日期
%cr: 提交日期(距今多长时间)
%s: 提交说明
- git log --pretty=format:"%h %s" --graph 这个选项添加了一些 ASCII 字符串来形象地展示你的分支、合并历史
git log --since=2.weeks
显示最近两周的提交信息,since后面添加时间信息,用于限制输出提交信息git log --author zzc10402
输入特定人员的提交信息git log -S function_name
另一个非常有用的过滤器是 -S(俗称“pickaxe”选项,取“用鹤嘴锄在土里捡石头”之意), 它接受一个字符串参数,并且只会显示那些添加或删除了该字符串的提交。 假设你想找出添加或删除了对某一个特定函数的引用的提交,可以调用git log -- /home/uisee/my_test_project/
输出制定路径的提交git log --until=2020-03-20
仅显示指定时间之前的提交。git log --since=2020-03-20
仅显示指定时间之后的提交。git log --grep "1111"
仅显示提交说明中包含指定字符串的提交git commit --amend
此操作紧紧修改提交信息,例如你修改了一个文件,然你add完以后直接提交了,但是你现在忘记了改里面的一个内容,然后你还不想有两条提交记录,那么此时你可以直接修改文件,然后add,最后使用这条指令,那么此次提交后就不会出现两条提交记录了git reset a.txt
如果你不小心add *.txt 后缀的所有文件到暂存区,但是你想撤销其中的几个那么,使用这条指令用于撤销当前暂存区中的特定文件git checkout -- a.txt
撤销对文件的修改,回复为上一次提交的内容,本地内容更改- git reset --hard 返回最近一次提交,撤销当前提交
git reset --hard 5ded355e0caee77c63c803728af47831fe0225e0
git remote
查看已经配置的远程仓库的名字git remote
会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL。git remote add <shortname> <url>
添加一个新的远程仓库,并且指定其名字
eg: git remote pb https://github.com/paulboone/ticgit
git fetch pb
由于之前已经制定了pd对应的链接,则使用远程仓库指令的时候直接可以使用pd代替 URL,此命令的作用是拉取远程仓库的内容git pull
如果你的当前分支设置了跟踪远程分支(阅读下一节和 Git 分支 了解更多信息), 那么可以用 git pull 命令来自动抓取后合并该远程分支到当前分支。git push <remote> <branch>
当你想分享你的项目时,必须将其推送到上游,此命令实现了讲你的分支直接推送值远程仓库git remote - v
-v的加入可以显示当前远程仓指定的名字和其后面跟随的链接git remote show <shortname>
查看远程仓的详细信息git remote rename <old name > <new name>
给远程仓重新命名git remote remove <shortname>
移除特定的远程仓
2. 打标签
通常为版本信息,例如
git tag -a v1.0 -m "the first version"
-a 负责添加一个标签,-m代表了对这个标签的解释git show v1.0
展示了这个标签的内容,相当于git截止到现在都发生了些什么- 通过-a添加的标签都属于附注标签
git push origin v1.5
将本地标签推送至远程仓git push origin --tags
将本地所有标签都推送至远程仓git tag -d v1.0
删除本地标签git push <remote> :refs/tags/<tagname>
删除推送至远程仓的标签git push origin --delete <tagname>
第二种删除远程仓的标签的方式git tag -a v1.2 9fceb02
忘记打标签了,可以找到当时的位置,将commit头添加到命令末尾处即可完成补打标签
3.git 分支结构
git branch <bracnch name>
在当前commit下创建一个分支,eg.git branch testing
git log --oneline --decorate
查看当前各个分支所指向的对象
git分支结构中,通过HEAD头指针指向分支,git checkout <branch name>
切换到branch name的分支上去
当进行切换分支时,此时做一次修改然后commit,则新建的分支会自动跟随新的commit自动移动,切换分支的意思就是头指针HEAD切换了指向的对象,但是系统默认的master分支则不会动,仍然指向原来commit的地方,相当于头HEAD在哪个分支,git当前状态记录就跟随哪个分支git log --oneline --decorate --graph --all
查看现在项目分支情况,以图的形式展现git checkout -b <newbranchname>
创建一个分支的时候同时切换过去git merge <newbranchname>
将修改后的分支合并到之前的master分支上git branch -v
详细查看当前分支的提交信息等git branch --merged
查看当前已经合并的分支git branch --no-merged
查看当前没有合并的分支- 如果使用
git branch -d
指令删除没有merge的分支,则不能删除成功 git branch -D
可以强制删除没有merge的分支git merge origin/serverfix
将从远程拉下来的分支合并到本地的分支中git checkout -b serverfix origin/serverfix
如果想要在自己的 serverfix 分支上工作,可以将其建立在远程跟踪分支之上,这会给你一个用于工作的本地分支,并且起点位于 origin/serverfixgit checkout --track origin/serverfix
创建一个跟踪分支git checkout -b local_branch_name oringin/remote_branchname
创建跟踪分支,并且设置本地分支的名字与远程分支的名字不同git reset --hard <version number>
退回至指定版本的commit,git reset --hard HEAD^
退回至上一次的commit
4. 常用指令
git clean -f
清楚unracked file:%! python -m json.tool
可以调整json文件的格式