目录
下面代码段中的串皆为终端命令
git安装
sudo apt-get install -y git
git配置
1、配置用户名和邮箱
git config --global user.name +用户名(github官网注册的用户名)
git config --global user.email +邮箱(gitub官网注册绑定的邮箱)
完成后可查看配置:
git config --list
2、配置SSH
不配置SSH的话,一些git@github...的URL不能下载,并且大文件传输通过SSH稳定。
生成SSH秘钥
ssh-keygen -t rsa -C "你的邮箱"
接下来提示的地方一直按Enter就好,完成如下:
接下来查看生成秘钥:
cat ~/.ssh/id_rsa.pub
这一大串就是。下面登陆github配置SSH:
登上后点击主页settings -> SSH and GPS keys -> New SSH key
将id_rsa.pub文件中的内容全部复制到key中,输入title,点击Add SSH key。
完成如下:
最后检查下本地是否与github连接成功。输入命令若出现下图最后一行提示即为成功。
git的使用
这几天通关了Learn Git Branching学习git的使用,规整如下:
提交 | git commit ... |
创建 | git branch ... |
切换到分支 | git checkout ... |
合并 | git merge ... |
复制 | git rebase ... |
将分支复制到另一个分支 | git cherry-pick ...(哈希值) |
退回提交记录 | git reset ... |
退回提交记录并且多一个与上一级一样的分支 | git revert ... |
交互式rebase | git rebase -i ... |
建立标签 | git tag ...(标签名)...(哈希值) |
描述最近的标签 | git descirbe ... |
建立本地仓库克隆版本 | git clone |
从远程仓库获取数据(未修改本地文件) | git fetch |
抓取更新再合并到本地分支 | git pull (fetch + merge) |
将你的变更上传到指定的远程仓库,即发布成果 | git push(fetch + rebase) |
下面图中蓝色为初始状态,红色为目标状态。
一、主要
分支与合并
1、git merge
git branch bugFix
git checkout bugFix
git commmit
git checkout main
git commit
git merge bugFix
2、git rebase
git branch bugFix
git checkout bugFix
git commit
git checkout main
git commit
git checkout bugFix
git rebase main
提交树上的移动
1、HEAD直接移动
git checkout 哈希值
HEAD 总是指向当前分支上最近一次提交记录,大多数修改提交树的 git 命令都是从改变 HEAD 的指向开始的。
相对引用一(^):哈希值可以使用代替,如:C3=bugFix^,C1=bugFix^^
相对引用二(~):更简单,比如^^ => ~2,^^^ => ~3
git checkout C4
2、强制修改
git branch -f A B(让A指到B)
直接使用-f选项让分支指向另一个提交。例如:git branch -f main HEAD~3 就会将main分支强制指向HEAD的第3级父提交。
撤销分支
方法一
git reset ...
方法二
git revert ...
下面我们开改!
git reset local~1
git checkout C2
git checkout pushed
git revert HEAD
输入命令完成后就OK了
*修改提交树
1、快速将分支复制到另一个HEAD指向的分支
git cherry-pick ... ... (哈希值)
git cherry-pick C3 C4 C7
那如果你不清楚你想要的记录的哈希值呢?
2、交互式rebase(复制)
git rebase -i ... ...
如果你在命令后增加了-i 这个选项,git 会打开一个 UI 界面,并列出将要被复制到目标分支的备选提交记录,它还会显示每个提交记录的哈希值和提交说明,提交说明有助于你理解这个提交进行了哪些更改。
当 rebase UI界面打开时能做3件事:
- 调整提交记录的顺序(通过鼠标拖放来完成)
- 删除你不想要的提交(通过切换
pick
的状态来完成,关闭就意味着你不想要这个提交记录)- 允许你把多个提交记录合并成一个。
git rebase -i HEAD~4
输入指令后弹出页面进行编辑修改如下
修改成功如下
插入一个小点记录
(一个关卡打到最后突然脑子抽抽不知道这最后一步怎么操作了T-T
如果想要合并,让它从这样
变成这样
只需要两步:
git checkout main
git merge caption
还想再简单一些也可以:
git branch -f main C3''
只取一个提交记录
git rebase -i HEAD~3
git branch -f main bugFix
添加标签
git tag ...(标签名) ...(添加位置的哈希值)
git tag v0 C1
git tag v1 C2
git checkout c2
描述离你最近的标签
git describe ...
多次rebase
首先git rebase main bugFix,得到
接着git rebase bugFix side
再进行git rebase side another
最后一步git branch -f main another,完成。
git rebase main bugFix
git rebase bugFix side
git rebase side another
git branch -f main another
两个父节点
上面有提到^和~。其实操作符 ^
与 ~
一样,后面也可以跟一个数字。
但是该操作符后面的数字与 ~
后面的不同,并不是用来指定向上返回几代,而是指定合并提交记录的某个父提交。git 默认选择合并提交的是“第一个”父提交,而在操作符 ^
后跟一个数字可以改变这一默认行为。
上题目:
git branch bugWork HEAD~^2~
二、远程仓库
1、创建远程仓库 git clone
git clone
2、从远程仓库获取数据 git fetch
git fetch 做了些什么
- 从远程仓库下载本地仓库中缺失的提交记录
- 更新远程分支指针(如
o/main
)
git fetch
实际上将本地仓库中的远程分支更新成了远程仓库相应分支最新的状态。
git fetch 不会做的事
git fetch
并不会改变你本地仓库的状态。它不会更新你的main
分支,也不会修改你磁盘上的文件。它可能已经将进行这一操作所需的所有数据都下载了下来,但是并没有修改你本地的文件。所以, 可以将
git fetch
的理解为单纯的下载操作。
git fetch
3、从远程仓库获取更新并合并到本地分支 git pull
pull命令相当于命令fetch + merge的执行结果。比如远程仓库里的学习资料有了新内容,需要把新内容下载下来的时候,就可以使用git pull命令。事实上,git pull是相当于从远程仓库获取最新版本,然后再与本地分支merge(合并)。
git pull
那我想要上传自己的内容怎么办呢?
4、 将变更上传到指定的远程仓库并在合并新提交记录 git push
与pull相反,这次我要对仓库进行上传的动作。
git commit
git commit
git push
到这儿就差不多了,这两天摆得过分找个突破口,就把这个关过个七七八八。
现在恢复状态了等等开始研究小组的任务,至于这个git远程仓库高级操作后期再跟进。