1
0

Git:修订文档

This commit is contained in:
周中平 2022-11-16 18:00:21 +08:00
parent 5b34eab911
commit dd5101cbd8
No known key found for this signature in database
GPG Key ID: B1DF9DD42D8E00DC
6 changed files with 196 additions and 217 deletions

View File

@ -26,6 +26,8 @@ Git 的分支模型被称为它的**「必杀技特性」**,也正因为这一
```shell
// 创建分支
git branch <branch-name>
// 创建并切换到分支
git branch -b <branch-name>
```
这会在当前所在的提交对象上创建一个指针。
@ -36,7 +38,7 @@ git branch <branch-name>
```shell
// 切换到一个已存在的分支
git checkout <branch-name>
git switch <branch-name>
// 在当前所在的提交对象上创建新分支,并切换到新分支。
git checkout -b <branch-name>
@ -56,6 +58,13 @@ git branch
git merge <branch-name>
```
### 指定分支
```shell
// 强制指定分支到某个提交记录
git branch -f <branch> [<start-point>]
```
### 删除分支
```shell
@ -94,7 +103,7 @@ git checkout -b iss53
现在你接到那个电话,有个紧急问题等待你来解决,现在要做的就是切换回主分支。
```shell
git checkout master
git switch master
```
接下来,你要修复这个紧急问题。新建一个 hotfix 分支,直至问题解决。
@ -108,7 +117,7 @@ git checkout -b hotfix
然后将 hotfix 分支合并回你的 master 分支来部署线上。
```shell
git checkout master
git switch master
git merge hotfix
```
@ -125,7 +134,7 @@ git branch -d hotfix
假设这时你已经完成了 iss53 的需求,需要将 iss53 分支合并入 master 分支。
```shell
git checkout master
git switch master
git merge iss53
```
@ -222,20 +231,23 @@ git push <remote> --delete <branch>
你可以使用 rebase 命令将提交到某一分支上的所有修改都移至另一分支上,就好像“重新播放”一样。在 Git 中,这种操作就叫做 变基rebase
```shell
// 重放式变基
git rebase <base-branch> <topic-branch>
// 交互式变基
git rebase -i <base-branch> <topic-branch>
```
它的原理是首先找到这两个分支(假设当前分支 experiment、变基操作的目标基底分支 master 的最近共同祖先,然后对比当前分支相对于该祖先的历次提交,提取相应的修改并存为临时文件, 然后将当前分支指向目标基底, 最后以此将之前另存为临时文件的修改依序应用。
```shell
// 1.切换 experiment 分支。
git checkout experiment
git switch experiment
// 2.变基至 master 分支。
git rebase master
// 3.切换 master 分支。
git checkout master
git switch master
// 4.合并 experiment 分支。
git merge experiment
@ -255,7 +267,7 @@ git merge experiment
git rebase --onto master server client
// 2. 切换 master 分支
git checkout master
git switch master
// 3. 合并 client 分支
git merge client
@ -268,7 +280,7 @@ git merge client
git rebase master server
// 2.切换 master 分支
git checkout master
git switch master
// 3.合并分支
git merge server

View File

@ -23,14 +23,13 @@ date: 2022-09-13
在命令行当前目录中执行 git init就可以将当前目录初始化为 Git 仓库。
```shell
~/gitStudy# ls -l
$ ls -l
total 0
~/gitStudy# git init
$ git init
Initialized empty Git repository in /root/gitStudy/.git/
# 在 /root/gitStudy/.git/ 目录初始化空 Git 仓库完毕。
~/gitStudy# ls -a
$ ls -a
. .. .git
~/gitStudy#
```
### git clone
@ -145,7 +144,7 @@ $ git commit -am 'changes to hello file'
git reset 命令用于回退版本,可以指定退回某一次提交的版本。
```shell
git reset HEAD^
$git reset HEAD^
```
### git rm
@ -183,7 +182,7 @@ $ git branch -d (branchname)
在 Git 中切换至指定分支。
```shell
git switch master
$git switch master
```
### git checkout
@ -191,7 +190,7 @@ git switch master
在 Git 中 git checkout 创建新分支,并立即切换到它
```shell
git checkout -b (branchname)
$git checkout -b (branchname)
```
### git merge
@ -282,7 +281,7 @@ $ git remote rm <remote-name>
在 Git 中 git fetch 从远端仓库**下载新分支与数据**。
```shell
git fetch <remote-name>
$git fetch <remote-name>
```
### git pull
@ -290,7 +289,7 @@ git fetch <remote-name>
在 Git 中 **git pull 从远端仓库提取数据并尝试合并到当前分支。**该命令就是在 git fetch 之后紧接着 git merge 远端分支到你所在的任意分支。
```shell
git fetch <remote-name>
$git pull <remote-name>
```
### git push
@ -298,7 +297,7 @@ git fetch <remote-name>
在 Git 中 git push remote-name branch-name 将本地改动推送到远端仓库。 如果可以的话,它会依据你的 branch 的样子,推送到远端的 branch 去。
```shell
git push github master
$git push github master
```
### git archive

View File

@ -1,182 +0,0 @@
---
title: 命令示例
description: Git 命令示例
keywords:
- Git
- 命令示例
tags:
- Git
sidebar_position: 4
author: 7Wate
date: 2022-09-13
---
## 配置相关
省略 `--global` 参数代表仅本项目生效
```shell
# 初始化本仓库(创建新仓库)
git init
git config --global user.name "xxx" # 配置用户名
git config --global user.email "xxx@xxx.com" # 配置邮件
git config --global color.ui true # git status等命令自动着色
git config --global color.status auto
git config --global color.diff auto
git config --global color.branch auto
git config --global color.interactive auto
git config --global http.proxy # 查看当前代理设置
git config --global http.proxy 'http://127.0.0.1:1080' # 设置http代理
git config --global https.proxy 'socks5://127.0.0.1:1080' # 设置https代理
git config --global --unset http.proxy #删除 proxy git config
```
## 代码文件与提交相关
```shell
git status # 查看当前版本状态
git add t.txt # 添加单个文件至暂存区
git add . # 增加所有更改过的文件至index不包括删除
git add -u # 仅增加所有已经跟踪的文件至index不包括新文件
git add -A # git add . 和 git add -u的合集
git commit -m 'xxx' # 提交
git commit --amend -m 'xxx' # 合并上一次提交(用于反复修改)
git commit -am 'xxx' # 将add和commit合为一步
git rm xxx # 删除index中的文件
git rm -r * # 递归删除
git log # 显示提交日志
git log -1 # 显示1行日志 -n为n行
git log --stat # 显示提交日志及相关变动文件
git log -p -m
git log -- filename # 查看文件的修改日志
git show xxxx # 显示某个提交的详细内容
git show dfb02 # 可只用commitid的前几位
git show HEAD # 显示HEAD提交日志
git show HEAD^ # 显示上一个版本的提交日志 ^^为上两个版本 ^5为上5个版本
git whatchanged # 显示提交历史对应的文件修改
git revert xxxxxx # 撤销提交xxxxx
```
## tag 相关
```shell
git tag # 显示已存在的tag
git tag -a v2.0 -m 'xxx' # 增加v2.0的tag
git show v2.0 # 显示v2.0的日志及详细内容
git log v2.0 # 显示v2.0的日志
git push --tags # 把所有tag推送到远程仓库
git tag -d tag_name # 本地删除名为tag_name的tag
git push origin :refs/tags/tag_name # 远程删除名为tag_name的tag
```
## 差异比较相关
```shell
git diff # 显示所有未添加至index的变更
git diff --cached # 显示所有已添加index但还未commit的变更
git diff HEAD^ # 比较与上一个版本的差异
git diff HEAD -- ./lib # 比较与HEAD版本lib目录的差异
git diff origin/master..master # 比较远程分支master上有本地分支master上没有的
git diff origin/master..master --stat # 只显示差异的文件,不显示具体内容
```
## 分支相关
```shell
git clone git+ssh://git@xxx.xxx.xxx.xxx/xx.git # clone远程仓库
git remote add origin git+ssh://git@xxx.xxx.xxx.xxx/xx.git # 增加远程定义用于push/pull/fetch
git branch # 显示本地分支
git branch --contains 50089 # 显示包含提交50089的分支
git branch -a # 显示所有分支
git branch -r # 显示所有原创分支
git branch --merged # 显示所有已合并到当前分支的分支
git branch --no-merged # 显示所有未合并到当前分支的分支
git branch -m master master_copy # 本地分支改名
git checkout -b master_copy # 从当前分支创建新分支master_copy并检出
git checkout -b master master_copy # 上面的完整版
git checkout dev/minibear2333 # 检出已存在的分支
git checkout --track dev/minibear2333 # 检出远程分支dev/minibear2333并创建本地跟踪分支
git checkout v2.0 # 检出版本v2.0
git checkout -b devel origin/develop # 从远程分支develop创建新本地分支devel并检出
git checkout -- README # 检出head版本的README文件可用于修改错误回退
git merge origin/master # 合并远程master分支至当前分支
git cherry-pick xxxxxx # 合并提交xxxxxx的修改
git push origin master # 将当前分支push到远程master分支
git push origin :dev/minibear2333 # 删除远程仓库的dev/minibear2333分支
git fetch # 获取所有远程分支不更新本地分支另需merge
git fetch --prune # 获取所有原创分支并清除服务器上已删掉的分支
git pull origin master # 获取远程分支master并merge到当前分支
git mv README README2 # 重命名文件README为README2
git reset --hard HEAD # 将当前版本重置为HEAD通常用于merge失败回退
git rebase
git branch -d dev/minibear2333 # 删除分支dev/minibear2333需要确认本分支修改已合并到其他分支
git branch -D dev/minibear2333 # 强制删除分支dev/minibear2333小心操作
git ls-files # 列出git index包含的文件
git show-branch # 图示当前分支历史
git show-branch --all # 图示所有分支历史
```
## 图示命令
```shell
git ls-tree HEAD # 内部命令显示某个git对象
git rev-parse v2.0 # 内部命令显示某个ref对于的SHA1 HASH
git reflog # 显示所有提交,包括孤立节点
git show xxx # 查看xxx提交改变了哪些文件内容
git show HEAD # 显示当前分支昨天的状态
git log --pretty=format:'%h %s' --graph # 图示提交日志
git show HEAD~3 # 查看倒数第三次提交改变了哪些内容
git show -s --pretty=raw xxxxxx
```
## 暂存相关
```shell
git stash # 暂存当前修改将所有至为HEAD状态
git stash list # 查看所有暂存
git stash show -p stash@{0} # 参考第一次暂存
git stash apply stash@{0} # 应用第一次暂存
```
## 查找
```shell
git grep "delete from" # 查找当前分支下的文件内容可以git grep --help看具体用法
git grep "delete from" v2.0 # 指定tag来查找
```
## git index 操作(追踪)
```shell
git update-index —assume-unchanged 文件名 # 取消本地跟踪
git update-index —no-assume-unchanged 文件名 # 恢复本地跟踪
git ls-files -v| grep '^h\ ' # 可以看到本地不跟踪的文件
```
## 管理远程分支
```shell
git remote # 不带参数,列出已经存在的远程分支
git remote -v #(-v是verbose 的简写,取首字母)列出详细信息在每一个名字后面列出其远程url
git remote add [shortname] url #添加远程仓库
git fetch origin # 字符串 origin 指代对应的仓库地址了.比如说,要抓取所有 origin 有的,但本地仓库没有的信息,可以用
```
## 打标签
```shell
git tag #列出所有的标签
git tag -l "v1*" #支持模糊匹配
git tag v2.3 #创建标签
git tag v2.4 -a -m "test" #创建轻量标签 `-a` 参数可以省略
git show v2.4 #查看附注标签
git tag -a v2.5 9fceb02 #历史提交打 `tag`
git push origin v1.0 #推送单个标签
git push origin --tags #推送全部标签
git tag -d v1.0 #删除标签
git push origin -- delete v1.0 #删除远程标签
git checkout v1.1 #检出标签到本地
git checkout -b v1.1-dev v1.1 #检出标签到分支
```

View File

@ -0,0 +1,82 @@
---
title: 常用命令
description: Git 常用命令
keywords:
- Git
- 常用命令
tags:
- Git
sidebar_position: 4
author: 7Wate
date: 2022-09-13
---
## 创建版本库
```
$ git clone <url> #克隆远程版本库
$ git init #初始化本地版本库
```
## 修改和提交
```
$ git status #查看状态
$ git diff #查看变更内容
$ git add . #跟踪所有改动过的文件
$ git add <file> #跟踪指定的文件
$ git mv <old><new> #文件改名
$ git rm<file> #删除文件
$ git rm --cached<file> #停止跟踪文件但不删除
$ git commit -m "commit messages" #提交所有更新过的文件
$ git commit --amend #修改最后一次改动
```
## 查看提交历史
```
$ git log #查看提交历史
$ git log -p <file> #查看指定文件的提交历史
$ git blame <file> #以列表方式查看指定文件的提交历史
```
## 撤销
```
$ git reset --hard HEAD #撤销工作目录中所有未提交文件的修改内容
$ git checkout HEAD <file> #撤销指定的未提交文件的修改内容
$ git revert <commit> #撤销指定的提交
$ git log --before="1 days" #退回到之前 1天的版本
```
## 分支与标签
```
$ git branch #显示所有本地分支
$ git checkout <branch/tag> #切换到指定分支和标签
$ git branch <new-branch> #创建新分支
$ git branch -d <branch> #删除本地分支
$ git tag #列出所有本地标签
$ git tag <tagname> #基于最新提交创建标签
$ git tag -d <tagname> #删除标签
```
## 合并与衍合
```
$ git merge <branch> #合并指定分支到当前分支
$ git rebase <branch> #衍合指定分支到当前分支
```
## 远程操作
```
$ git remote -v #查看远程版本库信息
$ git remote show <remote> #查看指定远程版本库信息
$ git remote add <remote> <url> #添加远程版本库
$ git fetch <remote> #从远程库获取代码
$ git pull <remote> <branch> #下载代码及快速合并
$ git push <remote> <branch> #上传代码及快速合并
$ git push <remote\> :<branch/tag-name\> #删除远程分支或标签
$ git push --tags #上传所有标签
```

View File

@ -11,21 +11,40 @@ author: 7Wate
date: 2022-09-13
---
## Git Config 配置
## Config 配置
Git 配置文件分为三级,系统级(--system、用户级--global和目录级--local三者的使用优先级以离目录repository最近为原则如果三者的配置不一样则生效优先级 **目录级>用户级>系统级**
1. **系统级**/etc/gitconfig使用 `git config --system user.name "7wate"` ,`git config --sytem user.email "admin@7wate.com"` 来进行配置,该配置**对系统上所有用户及他们所拥有的仓库都生效**的配置值。
2. **用户级**~/.gitconfig使用 `git config --global user.name "7wate"` ,`git config --global user.email "admin@7wate.com"` 来进行配置,该配置**对当前用户上所有的仓库有效**。
3. **目录级**.git/config使用 `git config --local user.name "7wate"` , `git config --local user.email "admin@7wate.com"` 来进行配置,**只对当前仓库生效。**
## Git 设置默认分支
1. **系统级**/etc/gitconfig使用 **--system** 来进行配置,该配置**对系统上所有用户及他们所拥有的仓库都生效**的配置值。
```shell
git config --global init.defaultBranch <name>
git config --system user.name "用户名"
git config --system user.email "邮箱地址"`
```
## Git 多平台换行符问题(LF or CRLF)
2. **用户级**~/.gitconfig使用 **--global** 来进行配置,该配置**对当前用户上所有的仓库有效**。
```shell
git config --global user.name "用户名"
git config --global user.email "邮箱地址"
```
3. **目录级**.git/config使用 **--local** 来进行配置,**只对当前仓库生效。**
```shell
git config --local user.name "用户名"
git config --local user.email "邮箱地址"
```
## 设置默认分支
可以根据需求设置为**系统级(--system、用户级--global和目录级--local**。
```shell
git config --global init.defaultBranch <分支名称>
```
## 多平台换行符问题(LF or CRLF)
**文本文件所使用的换行符,在不同的系统平台上是不一样的。**UNIX/Linux 使用的是 0x0ALF早期的 Mac OS 使用的是 0x0DCR后来的 OS X 在更换内核后与 UNIX 保持一致了。但 DOS/Windows 一直使用 0x0D0ACRLF 作为换行符。
@ -51,7 +70,7 @@ git config --global core.autocrlf input
git config --global core.safecrlf true
```
## Alias 重命名命令
## Alias 重命名别名
```shell
git config --global alias.st status //status 缩写成 st
@ -76,3 +95,60 @@ alias gp='git push'
```
Git 常用命令,可以根据实际需要创建缩写命令。
## GPG 签名提交
1. 生成 GPG 密钥对
```shell
// 1.1 创建 GPG 密钥
gpg --full-gen-key
// 1.2 列出 GPG 密钥
gpg --list-secret-keys --keyid-format LONG "your_email"
// 1.3 复制 GPG 密钥 ID以下示例复制 4AEA00A342C24CA3。
sec ed25519/4AEA00A342C24CA3 2021-09-14 [SC]
6DE3507E82DEB6E8828FAAC34AEA00A342C24BD4
uid [ 绝对 ] your_name "your_email"
ssb cv25519/812B586FD245B560 2021-09-14 [E]
// 1.4 导出 GPG 公钥(以上述 ID 为例)
gpg --armor --export 4AEA00A342C24CA3
```
2. 平台添加 GPG 公钥配置
将 GPG 公钥添加到 git 托管平台,例如 Github、Gitlab、Gitee 等。
3. 本地 Git 仓库关联 GPG 密钥
```shell
// 3.1 列出 GPG 密钥
gpg --list-secret-keys --keyid-format LONG "your_email"
// 3.2 复制 GPG 密钥 ID以下示例复制 4AEA00A342C24CA3。
sec ed25519/4AEA00A342C24CA3 2021-09-14 [SC]
6DE3507E82DEB6E8828FAAC34AEA00A342C24BD4
uid [ 绝对 ] your_name "your_email"
ssb cv25519/812B586FD245B560 2021-09-14 [E]
// 3.3 本地 Git 仓库中配置该密钥,对 commit 提交进行签名。
git config --global user.signingkey 4AEA00A342C24CA3
```
4. 签名 Git commit
运行 Git commit 命令时需要用到 `-S` 参数,如果不希望每次都要输入 `-S` 标志,可以配置默认签名。
```shell
// 签名提交
git commit -S -m "your_commit_message"
// 开启默认签名提交
git config --global commit.gpgsign true
```
5. 验证签名
最后可以推送签名提交到 git 托管平台,验证是否签名成功!

View File

@ -11,14 +11,6 @@ author: 7Wate
date: 2022-09-23
---
## 镜像站
| 域名 | https | 克隆加速 | zip 加速 | releases 加速 | 主机服务商 | 服务器所在地 |
| ---------------------------------------------------- | ----- | -------- | -------- | ------------- | ---------- | ------------ |
| [https://doc.fastgit.org](https://doc.fastgit.org/) | ✓ | ✓ | ✓ | ✓ | fastgit | 香港 |
| [https://hub.fastgit.xyz/](https://hub.fastgit.xyz/) | ✓ | ✓ | ✓ | ✓ | fastgit | 香港 |
| [https://gitclone.com](https://gitclone.com/) | ✓ | ✓ | ✗ | ✗ | Aliyun | 杭州 |
## 搜索
- 按 `s` 键直接聚焦倒搜索框输入