【git指南--命令大全】

我看好多文章命令都记录得比较发散不够全面,这里还是把我自己的笔记分享出来,方便查阅。

文章目录

    • 1. git config
      • 作用域
      • --list 显示当前所有配置
      • 配置
      • cd ~/.ssh
    • 2. 初始化 git 仓库
      • 1、把已有项目代码纳入 git 管理
      • 2、新建的项目直接用git 管理
      • 3、克隆仓库
    • 3. git add
    • 4. git commit
    • 5. git mv
    • 6. git log
    • 7. git branch
    • 8. git diff
    • 9. git reset
    • 10. git checkout
    • 11. git rm
    • 12. git stash
    • 13. git ignore
    • 14. git remote
      • 查看关联的远程仓库信息
      • 添加远程仓库的关联
      • 删除远程仓库的关联
      • 修改远程仓库的关联
    • 15. git fetch
    • 17. git merge
    • 18. git pull
    • 19. 冲突
      • step 1 : git status
      • step 2 : 冲突显示
      • step 3 : git add
      • step 4 : git commit
    • 20 .git tag
    • 21. git push
      • 向远端push可能失败的原因
    • 22. git rerere
    • 23. git 传输协议
    • 24. 流程
    • 25. 分离头指针 detached HEAD
    • 26. commit 、tree、blob关系
  • github

1. git config

作用域

  • git config --local
    • 只对某个仓库有效(需在仓库目录下操作)
  • git config --global
    • 对当前用户所有仓库有效
  • git config --system
    • 对系统用户所有登录用户有效(基本不用)

–list 显示当前所有配置

  • git config --local --list
  • git config --global --list
  • git config --system --list

配置

格式:git config --<作用域> [参数] [值]

  • 配置全局作用域的用户名
    • git config --global user.name ‘isymikasan’

cd ~/.ssh

查看本机公私钥

2. 初始化 git 仓库

1、把已有项目代码纳入 git 管理

  • $ cd 项目代码所在文件夹

  • $ git init

2、新建的项目直接用git 管理

  • $ cd 某个文件夹
  • $ git init you_project
    • 会在当前路径下创建和项目名称同名的文件夹
  • $ cd you_project

3、克隆仓库

  • git clone [ssh地址] [http地址]

3. git add

添加文件至暂存区

  • git add .
    • 添加工作目录全部变更至暂存区
  • git add -u
    • 添加工作目录全部修改至暂存区

4. git commit

提交暂存区文件至版本历史

  • git commit -m ‘提交注释’

5. git mv

变更暂存区文件名

  • git mv 源文件名 目标文件名
    • git mv readme readme.md

6. git log

  • git log --oneline
    • 一行简洁查看
  • git log --oneline --all
    • 一行简洁查看所有分支
  • git log --n*
    • git log —oneline --n4 :一行简洁查看最近4条log
    • git log --n4 :查看最近4条
  • git log --graph :图形化版本演进历史
  • git log 分支
    • git log master :查看master分支log

7. git branch

  • git branch

    • 列出所有本地分支
  • git branch -r

    • 列出所有远程分支
  • git branch -a

    • 列出所有本地分支和远程分支
  • git branch -av

    • 列出所有本地分支和远程分支 并加上commitid
  • git branch [branch-name]

    • 新建一个分支,但依然停留在当前分支
  • git checkout -b [branch]

    • 新建一个分支,并切换到该分支
  • git branch [branch] [commit]

    • 新建一个分支,指向指定commit
  • git branch -d [branch]

    • 删除安全的分支

8. git diff

查看文件差异

  • git diff
    • 工作区与暂存区的差别
    • git diff – [文件名]…
      • 某一文件工作区与暂存区的差别
  • git diff --cached
    • 比较暂存区跟HEAD指向分支的最新提交之间的区别
  • git diff [commit Id] [commit id2]
    • 比较两次提交的差异
    • git diff [commit Id] [commit id2] – [文件名]
      • 比较两次提交指定文件的差异
  • git diff [分支1] [分支2]
    • 比较两个分支不同差异
    • git diff [分支1] [分支2] – [文件名]
      • 比较两个不同分支指定文件差异

9. git reset

变更暂存区文件(回滚)

  • git reset HEAD
    • 恢复暂存区为 当前HEAD指向分支的最近一次提交(删除当前暂存区所有内容)
  • git reset HEAD – [文件名]
    • 恢复暂存区指定文件为 当前HEAD指向分支的最近一次提交的文件
  • git reset --hard [commit Id] (慎用!)
    • 清除指定提交前的所有提交,将所有文件恢复为指定提交时的内容

10. git checkout

变更工作区文件

  • git checkout – [文件名]
    • 将工作区文件恢复为暂存区文件
  • git checkout [分支名]
    • 切换分支为指定分支
  • git checkout -b [本地分支] [远程分支]
    • 基于远程分支在本地新建分支,并自动切换到该分支

11. git rm

删除文件

  • git rm [文件名]
    • 将工作区文件删除同时暂存区也删除

12. git stash

  • git stash
    • 将工作区的修改临时存放起来
  • git stash apply
    • 将stash存放的文件拷贝出来给当前工作区
  • git stash pop
    • 将stash里的文件移除到当前工作区

13. git ignore

  • 在仓库目录创建 .gitignore 文件并添加指定文件名或文件夹
    • vi .gitignore

各种语言项目中不需要被git管控的文件:https://github.com/github/gitignore

14. git remote

查看关联的远程仓库信息

  • git remote
    • 查看关联的远程仓库的名称
  • git remote -v
    • 查看关联的远程仓库的详细信息

添加远程仓库的关联

远程仓库的名称一般默认为 origin (远程仓库的名称推荐使用默认的名称 origin ),当然,你可以设置为其他的名称。

在 add 后➕ 自定义远程仓库名字

  • git remote add origin [远程仓库url]/[本地仓库路径]
    • git_url 为你的远程仓库的 url,可采用 http 协议或 ssh(git) 协议

删除远程仓库的关联

  • git remote remove [name]

修改远程仓库的关联

比如,之前你关联的远程仓库使用的协议是 http ,你想将关联的远程仓库的 url 改为 ssh 协议的。

  • git remote set-url [自定义远程仓库名/origin] [newurl]

15. git fetch

将远程仓库最新分支跟本地的远程仓库做一个同步

  • git fetch <远程主机名>
    • 这个命令将某个远程主机的更新全部取回本地
  • git fetch <远程主机名> <分支名>
    • 将指定远程分支更新取回本地

17. git merge

  • git merge 命令
    • branch为需要合并到当前分支的目标分支名称

18. git pull

  • git pull <远程主机名> <远程分支名>:<本地分支名>
    • 将远程主机的某个分支的更新取回,并与本地指定的分支合并
  • git pull <远程主机名> <远程分支名>
    • 远程分支与当前分支合并

19. 冲突

将要合并的两个分支都修改了同一个而文件的同一个部分内容,Git就无法确定应该使用哪个版本的内容。

当这种情况发生时,合并过程会停止在合并commit提交之前,以便给用户留下机会手动修复这些冲突。

step 1 : git status

列出哪些文件含有冲突并需要手动解决

step 2 : 冲突显示

当Git在合并过程中碰到了冲突,它会编辑受影响的文件中的相关内容,并添加视觉标记用以展示冲突中双方在此部分的不同内容

视觉标记为:<<<<<<<,=======,>>>>>>>

找到冲突发生的具体位置,例如

here is some content not affected by the conflict
<<<<<<< main
this is conflicted text from main
=======
this is conflicted text from feature branch
>>>>>>> feature branch;
  • ====== 标记之前的内容是 接收合并的分支(当前分支)
  • ====== 标记之后的内容来 要合并的分支(拉取下来要合并的分支)

完成了冲突的修复并准备好继续进行合并(删除不想要的和git添加的标识符)

step 3 : git add

只需要执行git add命令把已经解决好冲突的文件添加暂存区,告诉Git这些冲突已经解决完毕

step 4 : git commit

完成合并commit

20 .git tag

  • git tag [标签]
    • 打标签命令,默认为HEAD
  • git tag
    • 显示所有标签
  • git tag [标签] [版本号]
    • 给某个commit版本添加标签
  • git show [标签]
    • 显示某个标签的详细信息

21. git push

  • git push [远程主机名] [远程分支名]
    • 将当前分支推送到远程分支

向远端push可能失败的原因

【git指南--命令大全】_第1张图片

  • 上图本地分支 feature/add_git_command 是基于远程分支 feature/add_git_command 创建出来的,此时他们的hash值都是 13d4cf1 说明本地分支与远程分支是一致的

  • 当我们在修改文件时 ,其他用户向该远程分支提交并推送了

  • 此时修改文件后 出现 fast-forwards【git指南--命令大全】_第2张图片

  • git branch -av 检查本地远程分支与 远程仓库该分支的hash值

    • 本地【git指南--命令大全】_第3张图片

    • 远程仓库

      【git指南--命令大全】_第4张图片

这是因为git存储底层每一次提交都会生成一次快照树

  • 此时将最新的远程仓库同步到本地远程分支git fetch(**git存储的文件是根据内容进行判断是否是同一个文件的,因此同步远程仓库可以让本地的远程分支更远程仓库的hash值保持一致 **)

    • 再次查看:本地远程分支跟远程仓库保持一致

      【git指南--命令大全】_第5张图片

  • 通过 git merge 将本地远程分支更新到本地分支 使其同源

    • 因为本地修改了文件并commit了,所以在同源后会产生新的内容从而产生新的 commit树(此时进行push就没有问题了)
      • 【git指南--命令大全】_第6张图片

22. git rerere

  • 记录解决的冲突方式
  • 相同冲突只要执行一次

23. git 传输协议

【git指南--命令大全】_第7张图片

  • 哑协议 传输进度不可见,速度比智能协议慢

示例:

  • 将本地 git_learning文件下的git仓库备份到本地 git_backup文件下

    • –bare :不带工作区的裸仓库
    git_learning路径:/Users/mikasa/Documents/编程/git_learning
    
    git clone --bare file:///路径/.git [仓库名.git]
    
    git clone --bare file:Users/mikasa/Documents/编程/git_learning/.git backup.git
    
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s850XKCW-1686376953843)(/Users/mikasa/Library/Application Support/typora-user-images/image-20230211200750567.png)]

24. 流程

【git指南--命令大全】_第8张图片

25. 分离头指针 detached HEAD

HEAD翻译为“头部”,在Git中我们一般称为“头指针”,主要表示当前工作区基于哪个版本进行开发,也可以理解为当前开发所在分支的最后一次提交

我们一般切换分支都是使用已经创建的分支,例如git checkout master。另外还有一种操作,就是基于某次提交记录(git checkout commit版本号):

【git指南--命令大全】_第9张图片

这种操作切换的工作区没有在任何一个分支上面,与任何一个都没有关系。如果后续没有进行保存,在这个上面做的修改会被 git 彻底丢弃。

26. commit 、tree、blob关系

【git指南--命令大全】_第10张图片

一个 commit 对象包含一棵树

commit 树 存放了所有文件夹以及文件的快照,其中一个文件夹也是一棵树

git cat-file 命令显示版本库对象的内容、类型及大小信息。

  • -t 显示对象的类型。

  • -s 显示对象的大小。

  • -e 如果对象存在且有效,命令结束状态返回值为 0 。

  • -p. 根据对象的类型,以优雅的方式显式对象内容。

例:

【git指南--命令大全】_第11张图片

共有 4 个object对象:

  • Commit 对象
    • Tree对象 (包含所有文件夹和文件的树)
      • tree 对象(doc文件夹的树)
        • blob对象 (文件)

github

高级搜索

面板:https://github.com/search/advanced

参数:

  • in:redme
  • stars:>1000
  • language:java
  • forks:>1000
  • filename:gitlab-ci.yml (搜索仓库中文件名包含 xx的)

你可能感兴趣的:(git,github)