git--基础知识点--5--命令


git config

  • git config --local -l -l 代表--list
    • 查看仓库配置【必须要进入到具体的目录下,比如要查看TestGit仓库的配置信息】
  • git config --global -l
    • 查看用户配置
  • git config --system -l
    • 查看系统配置
  • git config -l
    • 查看所有的配置信息,依次是系统级别、用户级别、仓库级别
  • git config 配置名
    • 查看指定配置
      $ git config [--global | --local] user.name
      $ git config [--global | --local] user.email 
      
  • git config -e
    • 编辑配置文件
    • git config --local -e
      • 编辑仓库级别配置文件
    • git config --global -e
      • 编辑用户级别配置文件
    • git config --system -e
      • 编辑系统级别配置文件
  • git config 添加配置项目
    • 全局配置
      • 覆盖形式
        # windows下本质修改的是C:\Users\Administrator\.gitconfig文件
        $ git config --global user.email “you@example.com”
        $ git config --global user.name “Your Name”
        
      • 替换形式
        $  git config --global --replace-all user.email “you@example.com”
        $  git config --global --replace-all user.name “Your Name”
        
      • 删除形式
        $ git config --global --unset user.email “you@example.com”
        $ git config --global --unset user.name “Your Name”
        
    • 项目配置
      • git config --local user.email “you@example.com”
      • git config --local user.name “Your Name”
      • 本质修改的是项目下的.git目录下config文件

git clone <远程仓库地址>

  • clone有三个作用
    • (1) 完整的吧远程仓库下载到本地
    • (2) 创建origin远程仓库地址别名
    • (3) 初始化本地库

git init

  • 初始化本地库,在当前目录下出现一个.git目录

git hash-object new.txt

  • 为相应的文件产生一个长度为40的SHA-1哈希字符串

git update-index --add new.txt

  • 将相应的文件放入暂存区(即index文件),并在.git/objects目录下生成一个以该SHA-1的前两个字符命名的子目录,然后在该子目录下,存储刚刚生成的一个新文件,新文件名称是SHA-1的剩下的38个字符。

git add new.txt== git hash-object new.txt + git update-index --add new.txt


git ls-files --stage

  • 查看index文件即暂存取内容

git status

  • git status

    • 查看git状态

    例如
    在这里插入图片描述

  • git status -s

    • 使用 -s 参数来获得简短的输出结果

    例如
    在这里插入图片描述


git commit -m "提交new.txt"

  • 都是将暂存区的内容提交到本地库,生成一个commit对象,物理存储在HEAD文件中,逻辑上将该对象变成head所指的结点的后继结点。

git commit -am new.tex "提交new.tex" == git add new.txt + git commit -m new.text “提交new.txt”

  • 只对traced的文件有用,不能对新建Untracd的文件起作用。

git rm <file>

  • 删除文件
  • git rm --cached new.txt
    • 只从暂存区中删除 new.txt 文件
  • git rm new.txt
    • 从暂存区和工作区中删除 new.txt 文件
  • git rm -f new.txt
    • 如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f。强行从暂存区和工作区中删除修改后的 new.txt 文件。

    例如
    在这里插入图片描述


git checkout

  • git checkout new.txt

    • 将暂存区的 new.txt 文件恢复到工作区
    • 这个操作很危险,会清除工作区中未添加到暂存区的改动

    例如
    在这里插入图片描述

  • git checkout .

    • 将暂存区的所有文件恢复到工作区
    • 这个操作很危险,会清除工作区中未添加到暂存区的改动
  • git checkout HEAD new.txt

    • 将本地库中的 new.txt 文件恢复到工作区和暂存区
    • 这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

    例如
    在这里插入图片描述

  • git checkout HEAD .

    • 将本地库中的所有文件恢复到工作区和暂存区
    • 这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

git log

  • git log == git log --all

    • 显示历史提交记录

    例如
    在这里插入图片描述

  • git log --pretty=oneline

    • 更优雅的显示提交日志记录

    例如:
    在这里插入图片描述

  • git log --oneline

    • 以优雅的方式显示,commit对象哈希值部分只显示前7个字符

    例如
    在这里插入图片描述

  • git log --reverse --oneline

    • 逆向显示所有提交日志

    例如
    在这里插入图片描述

  • git log --graph == git log --all graph

    • 查看历史中什么时候出现了分支、合并。开启了拓扑图选

    例如
    在这里插入图片描述

  • git log --oneline --graph

    • 查看所有分支图形化的commit历史(oneline 一条提交信息用一行展示)

    例如
    在这里插入图片描述

  • git log --oneline --no-merges

    • 隐藏合并提交

    例如,该例中并没有合并
    在这里插入图片描述
    再例如,该例中有合并分支,但隐藏了合并提交
    在这里插入图片描述

  • git log --author=zhangsan --oneline -3

    • 想查找指定用户的提交日志

    例如
    在这里插入图片描述

  • 如果你要指定日期,可以执行几个选项:--since 和 --before,但是你也可以用 --until 和 --after

    例如,本文书写时间为2020-09-14:
    在这里插入图片描述

  • git log --oneline --branches[=<pattern>]

    • 可以显示master分支的日志

    例如:若查找的是当前分支日志,不能加[=<pattern>],添加会出错,默认就是当前分支
    在这里插入图片描述

  • git log --oneline branch1^branch2,可以查看在分支1,却不在分支2中的提交。^表示排除这个分支(Window下可能要给^branch2加上引号).

  • git log --oneline --decorate new.txt

    • 查看 new.txt 的历史标签

    例如
    在这里插入图片描述

  • 更多 git log 命令可查看:http://git-scm.com/docs/git-log


git blame new.txt

  • 查看 new.txt 文件的修改记录

例如
在这里插入图片描述


git tag

  • 注意标签、标签注解、commit备注都不是一回事。标签本质是一个指向commit/tree/blob对象的指针,与git自动生成的对象的hash值的作用类似,更加符合人的使用习惯。

  • git tag

    • 显示本地仓库所有标签

    例如
    在这里插入图片描述

  • git tag -a new.txt_fourth -m "第四次提交new.txt"

    • 为head所指的commit对象打上标签

    例如
    在这里插入图片描述

  • git tag -a new.txt_second 1142124 -m "第二次提交new.txt"

    • 如果忘了给某个提交打标签,又将它发布了,我们可以给它追加标签。

    例如
    在这里插入图片描述

  • git tag -s new.txt_third 225fccf -m "第三次提交new.txt"

    • -s表示用私钥签名一个标签,也就是采用PGP签名,因此,必须首先安装gpg(GnuPG),如果没有找到gpg,或者没有gpg密钥对,就会报错。没有安装gpg,暂时不做测试。

    例如
    在这里插入图片描述

  • git tag -d new.txt_fourth

    • 删除new.txt_fourth标签

    例如
    在这里插入图片描述

  • git tag -l

    • 效果与git tag 相同

    例如
    在这里插入图片描述

  • git tag -l "new.*"

    • 使用正则匹配查找,注意此处必须使用双引号

    例如
    在这里插入图片描述

  • git show new.txt_first

    • 可以查看new.txt_first所指commit对象说明文字

    例如
    在这里插入图片描述

  • git show-ref --taggit show-ref --tags

    • 查看远程仓库的所有标签

    例如
    在这里插入图片描述

  • git push origin v1.0

    • 将本地某个特定标签推送到远程
  • git push --taggit push --tagsgit push origin --tagsgit push origin --tag

    • 将本地标签一次性推送到远程
  • git push origin -d v1.0.0git push origin --delete v1.0.0

    • 删除远程的某个标签
  • git checkout new.txt_first

    • 切换到new.txt_first标签所指的commit对象。

    例如
    在这里插入图片描述

  • git checkout 12345678 -b newBranch

    • 如: 当前分支的某个commit id = 12345678,我们可以基于这个id创建本地分支,可以理解为创造了一个副本。
  • 更多有关git tag命令见https://git-scm.com/docs/git-tag


git remote

  • git remote add origin [地址]
  • git remote push origin master
  • git remote -v
    • 显示所有远程仓库

    例如
    在这里插入图片描述

  • git remote show [remote]
    • 显示某个远程仓库信息

    例如
    在这里插入图片描述

  • git remote rm origin
    • 删除本地origin别名,并不能删除origin所代表的远程仓库。如果需要再次对远程仓库进行操作,需要重新创建别名。
  • git remote rename origin origin1
    • 只是将origin重命名为origin1,对远程仓库无任何影响。过后对远程仓库的操作,需通过origin1来完成。

git reset

  • git reset HEAD
    • 用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。

    例如
    在这里插入图片描述

    • 补充
      • git reset HEAD^ == gti reset HEAD
        • 所有内容的上一个版本 恢复到暂存区
      • git reset HEAD^ new.txt
        • new.txt 文件的上一个版本恢复到暂存区
      • git reset 225fccf
        • 暂存区回退到指定版本
  • git reset --soft HEAD~3
    • 暂存区回退到上上上一个版本
  • git reset --hard HEAD
    • –hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回退到上一次版本,并删除之前的所有信息提交。注意与git checkout HEAD .的区别,在此处checkout只是将当前分支的commit对象在暂存区和工作区进行覆盖,但没有删除commit对象。
      • git reset –hard HEAD~2
        • 暂存区和工作区都回退到上上一个版本 ,删除第四次提交的commit对象结点。

        例如
        在这里插入图片描述

      • git reset –hard 4cf0c91
        • 暂存区和工作区都回退到4cf0c91版本 ,删除该版本以后提交的所有commit对象结点。
      • git reset --hard origin/master
        • 将本地仓库的状态恢复到和远程仓库的一样,本地的工作区和暂存区与该命令无关,不会受到影响。

        例如
        在这里插入图片描述

  • 补充
    在这里插入图片描述

git fetch

  • git fetch origin
    • 将某个远程仓库的更新全部取回本地
  • git fetch origin master
    • 将远程仓库origin 的master 分支 更新取回本地

git pull <远程主机名> <远程分支名>:<本地分支名>

  • git pull origin master:brantest
    • 将远程仓库 origin 的 master 分支拉取过来,与本地的 brantest 分支合并。
  • git pull origin master
    • 如果远程分支是与当前分支合并,则冒号后面的部分可以省略。该命令表示,取回 origin/master 分支,再与本地的 brantest 分支合并。

git push

  • git push <远程主机名> <本地分支名>:<远程分支名>
    • git push origin master:master
      • 将本地的 master 分支推送到 origin 代表的远程仓库的 master 分支。
  • git push <远程主机名> <本地分支名>
    • 如果本地分支名与远程分支名相同,则可以省略冒号
    • git push origin master
      • 将本地的 master 分支推送到 origin 代表的远程仓库的 master 分支。
        +git push --force origin master
    • 如果本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数,可以简写为-f
  • git push origin --delete master
    • 删除主机但分支可以使用 --delete 参数,可简写为-d,以下命令表示删除 origin 主机的 master 分支。

git mv [file] [newfile]

  • 工作区中的文件被重命名了,而索引区中的原file的索引被删除掉了,然后重新添加了一条索引。由于他只是一个重命名的操作,文件的内容并没有变,也就是说根据文件内容计算出来的SHA-1 Hash也不会变,所以他还是指向原来同一个对象。暂存区中的 这些索引在更新的时候都会重新计算一下所需要生成的tree对象的内容在提交的时候就可以直接生成tree对象,这也是暂存区一个提高git效率的地方
  • git mv new.txt new.txt1
    • 将new.txt重命名为new1.txt。

    例如
    在这里插入图片描述

  • git mv -f [file] [newfile]
    • 如果新但文件名已经存在,但还是要重命名它,可以使用 -f 参数

git branch

  • git branch
    • 列出本地库的所有分支
  • git branch (branchname)
    • 创建新的分支
  • git checkout -b (branchname)
    • 创建新分支并立即切换到该分支下
  • git branch (branchname)
    • 删除指定的分支
  • git checkout -b newbranchname commit_id
    • 基于某次提交创建新分支,并checkout到新分支上
    • git checkout -b hot 7bdb7e0 -f,-f表示强制切换分支,要慎用,可能会导致当前工作目录和暂存区的任务丢失。

    例如
    在这里插入图片描述


git merge


git diff

  • git diff [<path>...]
    • git diff
      • 不加参数即默认比较工作区与暂存区

      例如
      在这里插入图片描述

    • git diff new.txt
      • 工作区中的new.txt与暂存区中的new.txt文件对比

      例如
      在这里插入图片描述

  • git diff --cached [<path>...]
    • git diff --cached
      • 比较暂存区与HEAD所指的commit对象(当前分支下最近一次提交)

      例如
      在这里插入图片描述

    • git diff --cached new.txt
      • 暂存区中的new.txt与HEAD所指的commit对象(当前分支下最近一次提交)中的new.txt文件对比

      在这里插入图片描述

  • git diff HEAD [<path>...]
    • git diff HEAD
      • 比较工作区与HEAD所指的commit对象(当前分支下最近一次提交)

      例如
      在这里插入图片描述

    • git diff HEAD new.txt
      • 工作区中的new.txt与HEAD所指的commit对象(当前分支下最近一次提交)中的new.txt文件对比

      例如
      在这里插入图片描述

  • git diff commit-id [<path>...]
    • git diff 4cf0c91
      • 工作区与4cf0c91表示的commit对象做对比

      例如
      在这里插入图片描述

    • git diff 4cf0c91 new.txt
      • 工作区中的new.txt文件与4cf0c91表示的commit对象中的new.txt文件

      例如
      在这里插入图片描述

  • git diff --cached [<commit-id>] [<path>...]
    • git diff --cached 4cf0c91

      • 暂存区与指定commit对象对比

      例如
      在这里插入图片描述

    • git diff --cached 4cf0c91 new.txt

      • 暂存区中的new.txt文件与指定commit对象中的文件new.txt文件对比

      例如
      在这里插入图片描述

  • git diff [<commit-id>] [<commit-id>] [<path>...]
    • git diff 4cf0c91 1142124
      • 比较两个指定的commit对象之间的差异

      例如 在这里插入图片描述

    • git diff 4cf0c91 1142124 new.txt
      • 将两个指定的commit对象中的new.txt对比

      例如在这里插入图片描述

  • 使用git diff打补丁
    • git diff > patch
      • patch的命名是随意的,不加其他参数时作用是当我们希望将我们本仓库工作区的修改拷贝一份到其他机器上使用,但是修改的文件比较多,拷贝量比较大。
        此时我们可以将修改的代码做成补丁,之后在其他机器上对应目录下使用 git apply patch 将补丁打上即可

      例如
      在这里插入图片描述

    • git diff --cached > patch //是将我们暂存区与版本库的差异做成补丁
    • git diff --HEAD > patch //是将工作区与版本库的差异做成补丁
    • git diff Testfile > patch//将单个文件做成一个单独的补丁
    • 拓展:git apply patch 应用补丁,应用补丁之前我们可以先检验一下补丁能否应用,git apply --check patch 如果没有任何输出,那么表示可以顺利接受这个补丁
      另外可以使用git apply --reject patch将能打的补丁先打上,有冲突的会生成.rej文件,此时可以找到这些文件进行手动打补丁
    • 补充
      • 使用git diff 的所有命令的结果都可以重定向到一个文件做成补丁

git stash参考

  • 贮藏(stash)会处理工作目录的状态——即跟踪文件的修改与暂存的改动——然后将未完成的修改保存到一个上, 而你可以在任何时候重新应用这些改动(甚至在不同的分支上)。

  • git stash == git stash push

    • 将工作区与暂存区的状态保存到栈中
    • git stash 只会贮藏已修改和暂存的已跟踪文件,不会贮藏未跟踪和已忽略(以.开头的文件或文件夹)的文件

    例如
    在这里插入图片描述

  • git stash list

    • 查看所有的贮藏信息

    例如
    在这里插入图片描述

  • git stash apply

    • git stash apply
      • 将刚刚贮藏的工作重新应用
    • git stash apply stash@{0}
      • 将指定的贮藏的工作重新应用,此处重新引用stash@{0}。工作区恢复,暂存区不会恢复。除非加上–index参数

      例如
      在这里插入图片描述

      • 补充
        • 可以看到 Git 重新修改了当你保存贮藏时add到stage的文件。
        • 在本例中,当尝试应用贮藏时有一个干净的工作目录,并且尝试将它应用在保存它时所在的分支。 并不是必须要有一个干净的工作目录,或者要应用到同一分支才能成功应用贮藏。 可以在一个分支上保存一个贮藏,切换到另一个分支,然后尝试重新应用这些修改。
        • 应用贮藏时工作目录中也可以有修改与未提交的文件——如果有任何东西不能干净地应用,Git 会产生合并冲突
    • git stash apply --index
      • 获取栈顶贮藏,但并不弹出栈顶,将工作区和暂存区从栈中恢复成git stash前的状态,包括new.txt add到stage的状态。

      例如
      在这里插入图片描述

    • git stash apply stash@{0} --index
      • 获取指定的贮藏,但并不弹出栈顶,然后将工作区和暂存区从栈中恢复成git stash前的状态。
  • git stash drop

    • git stash drop
      • 删除栈顶贮藏
    • git stash drop stash@{0}
      • 删除指定贮藏
  • git stash pop

    • 功能与git stash apply相同,只不过贮藏会弹出栈
    • git stash pop
    • git stash pop --index
    • git stash pop stash{0}
    • git stash pop stash{0} --index
  • git stash --keep-index

    • 目前功能不是很理解

    例如 在这里插入图片描述

  • git stash -u == git stash --include-untracked

    • 默认情况下,git stash 只会贮藏已修改和暂存的 已跟踪 文件。 如果指定 --include-untracked 或 -u 选项,Git 也会贮藏任何未跟踪文件。 然而,在贮藏中包含未跟踪的文件仍然不会包含明确 忽略 的文件。
  • git stash -a

    • 要额外包含忽略的文件,请使用 --all 或 -a 选项。
  • git stash -p == git stash --patch

    • 如果指定了 --patch 标记,Git 不会贮藏所有修改过的任何东西, 但是会交互式地提示哪些改动想要贮藏、哪些改动需要保存在工作目录中。

    例如
    在这里插入图片描述

  • git stash branch <new branchname>

    • 如果贮藏了一些工作,将它留在那儿了一会儿,然后继续在贮藏的分支上工作,在重新应用工作时可能会有问题。 如果应用尝试修改刚刚修改的文件,你会得到一个合并冲突并不得不解决它。 如果想要一个轻松的方式来再次测试贮藏的改动,可以运行 git stash branch 以你指定的分支名创建一个新分支,检出贮藏工作时所在的提交,重新在那应用工作,然后在应用成功后丢弃贮藏
    • 这是在新分支轻松恢复贮藏工作并继续工作的一个很不错的途径。

    例如
    在这里插入图片描述

  • git stash clear

    • 删除所有缓存的stash
  • git stash show

  • git stash show -p

    • 在该命令后面添加-p或–patch可以查看特定stash的全部diff

git clean

  • 用来从你的工作目录中删除所有没有tracked过的文件
  • git clean -n
    • 是一次clean的演习, 告诉你哪些文件会被删除. 记住他不会真正的删除文件, 只是一个提醒.建议在使用所有的删除参数时都先加上 -n保证安全
  • git clean -f
    • 删除当前目录下所有untracked的文件. 他不会删除.gitignore文件里面指定的文件夹和文件
  • git clean -f <path>
    • 删除指定路径下的没有被track过的文件
  • git clean -fd
    • 连 untracked 的目录也一起删掉
  • git clean -fdx
    • 连 .gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)

git cherry-pick

  • 能够把另一个分支的一个或多个提交复制到当前分支
    • 具体方法
      • (1) git checkout 到另一个分支,然后使用git log找到想要复制的commit 的id,记录下来
      • (2) 切换到自己分支,使用git cherry-pick [上面记录的commit id] 回车即可!
      • (3) 如果想要复制多个, 使用git cherry-pick (commitid1…commitid100],commitid1为想复制的最老提交(不包括),commitid100为想复制的最新提交(包括)
      • 如果想要包括commitid1,那么在commitid1后加^即可,即 git cherry-pick [commitid1^…commitid100]!

  • 修改提交备注
    • git commit --amend
    • git rebase -i HEAD~2
    • 详解

git rev-parse

  • 要将任意扩展对象引用转换为SHA-1
    • git rev-parse master

      例如
      在这里插入图片描述

    • git rev-parse first

      例如
      在这里插入图片描述


git show-ref

  • 将指定的引用( branches 和 tags )转换为SHA-1,则有 git show-ref
    • git show-ref master

    例如
    在这里插入图片描述

    • git show-ref first

    例如
    在这里插入图片描述


git for-each-ref

  • 将所有的branch/tag引用转换为SHA-1

例如
在这里插入图片描述


git cat-file

  • git cat-file -p [commit | tree | blob |tag]

    • 查看指定对象的内容,可以是代表对象的哈希值或引用

    例如
    在这里插入图片描述

  • git cat-file -t [commit | tree | blob |tag]

    • 查看指定对象的对象类型,可以是代表对象的哈希值或引用

    例如
    在这里插入图片描述
    在这里插入图片描述


git restore <file>

  • 当处于modified状态的文件不希望add到暂存区时,可以使用该命令使工作目录中的<file>文件内容恢复到修改之前。
    # 例如:
    C:\Users\Administrator\Desktop\git-test (master)
    λ echo dec>>test.txt
    C:\Users\Administrator\Desktop\git-test (master)
    λ git status
    On branch master
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git restore <file>..." to discard changes in working directory)
            modified:   test.txt
    
    no changes added to commit (use "git add" and/or "git commit -a")
    C:\Users\Administrator\Desktop\git-test (master)
    λ git restore test.txt
    C:\Users\Administrator\Desktop\git-test (master)
    λ cat test.txt
    abc
    C:\Users\Administrator\Desktop\git-test (master)
    λ
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值