我看好多文章命令都记录得比较发散不够全面,这里还是把我自己的笔记分享出来,方便查阅。
文章目录
- 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可能失败的原因
-
上图本地分支 feature/add_git_command 是基于远程分支 feature/add_git_command 创建出来的,此时他们的hash值都是 13d4cf1 说明本地分支与远程分支是一致的
-
当我们在修改文件时 ,其他用户向该远程分支提交并推送了
-
此时修改文件后 出现 fast-forwards
-
git branch -av 检查本地远程分支与 远程仓库该分支的hash值
-
本地
-
远程仓库
-
这是因为git存储底层每一次提交都会生成一次快照树
-
此时将最新的远程仓库同步到本地远程分支git fetch(**git存储的文件是根据内容进行判断是否是同一个文件的,因此同步远程仓库可以让本地的远程分支更远程仓库的hash值保持一致 **)
-
再次查看:本地远程分支跟远程仓库保持一致
-
-
通过 git merge 将本地远程分支更新到本地分支 使其同源
- 因为本地修改了文件并commit了,所以在同源后会产生新的内容从而产生新的 commit树(此时进行push就没有问题了)
- 因为本地修改了文件并commit了,所以在同源后会产生新的内容从而产生新的 commit树(此时进行push就没有问题了)
22. git rerere
- 记录解决的冲突方式
- 相同冲突只要执行一次
23. git 传输协议
- 哑协议 传输进度不可见,速度比智能协议慢
示例:
-
将本地 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
24. 流程
25. 分离头指针 detached HEAD
HEAD
翻译为“头部”,在Git中我们一般称为“头指针”,主要表示当前工作区基于哪个版本进行开发,也可以理解为当前开发所在分支的最后一次提交。
我们一般切换分支都是使用已经创建的分支,例如git checkout master
。另外还有一种操作,就是基于某次提交记录(git checkout commit版本号
):
这种操作切换的工作区没有在任何一个分支上面,与任何一个都没有关系。如果后续没有进行保存,在这个上面做的修改会被 git 彻底丢弃。
26. commit 、tree、blob关系
一个 commit 对象包含一棵树
commit 树 存放了所有文件夹以及文件的快照,其中一个文件夹也是一棵树
git cat-file
命令显示版本库对象的内容、类型及大小信息。
-
-t 显示对象的类型。
-
-s 显示对象的大小。
-
-e 如果对象存在且有效,命令结束状态返回值为 0 。
-
-p. 根据对象的类型,以优雅的方式显式对象内容。
例:
共有 4 个object对象:
- Commit 对象
- Tree对象 (包含所有文件夹和文件的树)
- tree 对象(doc文件夹的树)
- blob对象 (文件)
- tree 对象(doc文件夹的树)
- Tree对象 (包含所有文件夹和文件的树)
github
高级搜索
面板:https://github.com/search/advanced
参数:
- in:redme
- stars:>1000
- language:java
- forks:>1000
- filename:gitlab-ci.yml (搜索仓库中文件名包含 xx的)