forked from Huxpro/huxblog-boilerplate
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
14 changed files
with
3,542 additions
and
157 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -20,7 +20,8 @@ | |
|
||
title: Kenshin Blog | ||
SEOTitle: 建新的博客 | Kenshin Blog | ||
header-img: img/dogs_running.gif # home-bg.jpg | ||
header-img: img/dogs_running.gif | ||
name: 朱建新 | ||
email: [email protected] | ||
keyword: "建新, Kenshin, 建新的博客, Kenshin Blog, 博客, 个人网站, 互联网, AI, 系统, 体系结构" | ||
description: >- # this means to ignore newlines until "baseurl:" | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,134 +1,203 @@ | ||
--- | ||
layout: post | ||
title: "git学习笔记(未完)" | ||
subtitle: "Learning to use git" | ||
date: 2022-12-20 | ||
author: "Kenshin" | ||
header-img: "img/post-bg/post-bg-default.png" | ||
tags: | ||
- LearnCS | ||
--- | ||
|
||
### 基本 | ||
|
||
git add <文件名/目录名> //提交到索引 | ||
|
||
git commit -m '<说明>' //将索引区域内容提交到本地仓库 | ||
|
||
git status //查看当前 git 状态,有无新的变更 | ||
|
||
git log //查看提交记录 | ||
|
||
//指定--graph 以文本形式显示更新记录的流程图,指定--oneline 在一行中显示提交的信息 | ||
|
||
//使用 git config --global alias.lg "log --graph --oneline" 添加别名 lg 方便使用 | ||
|
||
//使用 git config --global core.quotepath off 显示中文字符 | ||
|
||
### 推送 | ||
|
||
git remote add <name> <repository> //添加远程数据库并起别名,建议为 origin(默认) | ||
|
||
git push <repository> <refspec> //指定推送目标地址和推送的分支,不存在的分支会直接创建 | ||
|
||
git push -u <repository> <refspec> //使用-u 选项则下一次推送就可以省略分支名称 | ||
|
||
### 克隆 | ||
|
||
git clone <repository> <directory> | ||
|
||
git push //克隆的仓库推送时可以省略名称 | ||
|
||
### 拉取 | ||
|
||
git pull <repository> <refspec> //仓库省略则拉取到 origin,分支省略则拉取到 master | ||
|
||
//pull 后解决冲突后才能再 push | ||
|
||
git fetch//查看远程更新历史记录,存放到 FETCH_HEAD | ||
|
||
### 分支 | ||
|
||
//Merge 分支和 Topic 分支,如以 master 作为 merge 分支,创建 topic 分支以进行修改,测试 bug 等 | ||
|
||
git branch //查看分支状态,-a 看远程(要先 fetch) | ||
|
||
git branch <branchname> //创建分支 | ||
|
||
//HEAD 指向现在使用中的分支的最后一次更新 | ||
|
||
git checkout <branch> //切换分支 | ||
|
||
git checkout -b <branch> <commitID/branch>//创建并切换分支,可选的创建基于选项,可以是 remote branch(要先 fetch) | ||
|
||
git branch -d <branch> //删除分支,必须先离开;分支之间历史记录不一致需要先合并(使用-D 强制删除) | ||
|
||
//切换分支不会丢失未提交的索引区域或工作树的内容 | ||
|
||
### stash | ||
|
||
git stash //暂存修改内容,以消除切换分支的冲突 | ||
|
||
git stash pop //还原 | ||
|
||
git checkout <directory> //对改动的文件或目录放弃所有更改 | ||
|
||
### 合并分支 | ||
|
||
/\* | ||
|
||
merge:master 无修改则直接合并,称为 fast-forward;否则需要修改冲突,然后合并生成一个新的提交 | ||
|
||
rebase:将合并分支的记录添加到被合并分支的后面,需要修改冲突。rebase 后需要将被合并分支的 HEAD 移到最新的位置。与 merge 相比,主要作用是简化提交历史记录,具体的:向 topic 分支中更新 merge 分支,使用 rebase;向 merge 分支导入 topic 分支,先使用 rebase 再使用 merge | ||
|
||
\*/ | ||
|
||
git merge <commit> //将指定分支导入到 HEAD 分支,因此修改前需要用 checkout 切换 | ||
|
||
git diff <filename> //查看冲突内容 | ||
|
||
git diff --check | ||
|
||
git rebase <branch> | ||
|
||
//出现冲突进行修改后,使用 add,再使用 rebase --continue 继续。否则使用--skip 跳过这次提交,或--abort 撤销 rebase 操作 | ||
|
||
//最后会进入 VIM,可以添加合并说明 | ||
|
||
git rebase -i HEAD~~ //将 HEAD 和 HEAD 前两个提交之间的提交进行修改,squash 汇合,edit 修改.... | ||
|
||
git merge --squash <branch> //将 branch 分支所有提交合并生成新的提交到当前所在分支 | ||
|
||
### 标签 | ||
|
||
//标签是固定的,向 HEAD 添加,分为轻标签和注解标签 | ||
|
||
git tag <tagname> //轻标签 | ||
|
||
git tag -a <tagname> //注解标签,会进入 VIM 写注解 | ||
|
||
git tag -am "<注解>" <tagname> | ||
|
||
git tag -n //显示标签的列表和注解 | ||
|
||
git tag -d <tagname> //删除标签 | ||
|
||
//git checkout -b <branchname> <tagname> //以标签为基础创建并切换新分支,因为 tag 指向的就是一个 commit | ||
|
||
### 修改 | ||
|
||
git commit --amend -m "新的描述" //主要用于对最近一次提交(HEAD 所在)添加漏掉的档案或修改注解 | ||
|
||
git revert <commitID/HEAD> //相较于 reset,可以安全的取消过去发布的提交,不会减少历史记录 | ||
|
||
git reset //--soft:只移动 HEAD 位置,只取消提交;--mixed:还修改索引,用于复原修改过的索引的状态;--hard:还修改工作树,彻底取消最近的提交 | ||
|
||
git reset --hard HEAD~ //将 HEAD 回退一个操作,~~即两个 | ||
|
||
git reset --hard ORIG_HEAD //撤销 | ||
|
||
### SSL | ||
|
||
ssh-keygen //创建公钥私钥 | ||
|
||
..... | ||
--- | ||
layout: post | ||
title: "Git - 版本控制工具" | ||
subtitle: "Version Control Tool - Git" | ||
date: 2022-12-20 | ||
author: "Kenshin" | ||
header-img: "img/post-bg/post-bg-default.png" | ||
tags: | ||
- LearnCS | ||
--- | ||
|
||
# Git - 版本控制工具 | ||
|
||
## 基础配置 | ||
|
||
``` | ||
git config --global user.name <YourName> | ||
git config --global user.email <YourEMail> | ||
git config --list --global | ||
``` | ||
|
||
## 核心架构 | ||
|
||
- 工作区域  Working Directory  modified | ||
- 暂存区域  Stage(Index)     staged | ||
- Git仓库  Repository(HEAD)   commited | ||
|
||
### basic | ||
|
||
git add <文件名/目录名> //提交到索引 | ||
|
||
git commit -m "<说明>" //将索引区域内容提交到本地仓库 | ||
|
||
git commit -am "<说明>" //从工作区提交到本地仓库 | ||
|
||
git status //查看当前 git 状态,有无新的变更 | ||
|
||
git log //查看提交记录 | ||
|
||
//指定--graph 以文本形式显示更新记录的流程图,指定--oneline 在一行中显示提交的信息 | ||
|
||
//使用 git config --global alias.lg "log --graph --oneline" 添加别名 lg 方便使用 | ||
|
||
git log --oneline --decorate --graph --all | ||
|
||
//使用 git config --global core.quotepath off 显示中文字符 | ||
|
||
git reflog //记录的每一次操作的版本ID号 | ||
|
||
### push | ||
|
||
git remote add <name> <repository> //添加远程数据库并起别名,建议为 origin(默认) | ||
|
||
git push <repository> <refspec> //指定推送目标地址和推送的分支,不存在的分支会直接创建 | ||
|
||
git push -u <repository> <refspec> //使用-u 选项则下一次推送就可以省略分支名称 | ||
|
||
### clone | ||
|
||
git clone <repository> <directory> | ||
|
||
git push //克隆的仓库推送时可以省略名称 | ||
|
||
### pull | ||
|
||
git pull <repository> <refspec> //仓库省略则拉取到 origin,分支省略则拉取到 master | ||
|
||
git fetch//查看远程更新历史记录,存放到 FETCH_HEAD | ||
|
||
### branch | ||
|
||
//Merge 分支和 Topic 分支,如以 master 作为 merge 分支,创建 topic 分支以进行修改,测试 bug 等 | ||
|
||
git branch //查看分支状态,-a 看远程(要先 fetch) | ||
|
||
git branch <branchname> //创建分支 | ||
|
||
//HEAD 指向现在使用中的分支的最后一次更新 | ||
|
||
git checkout <branch> //切换分支 | ||
|
||
git checkout -b <branch> <commitID/branch>//创建并切换分支,可选的创建基于选项,可以是 remote branch(要先 fetch) | ||
|
||
git branch -d <branch> //删除分支,必须先离开;分支之间历史记录不一致需要先合并(使用-D 强制删除) | ||
|
||
//切换分支不会丢失未提交的索引区域或工作树的内容,但会丢弃匿名分支的所有修改 | ||
|
||
### checkout | ||
|
||
//从历史快照(或者暂存区域)中拷贝文件到工作目录 | ||
|
||
git checkout HEAD~ README.md //从指定的提交中拷贝文件到暂存区域和工作目录 | ||
|
||
git checkout -- README.md //如果命令中没有指定具体的快照 ID,则将从暂存区域恢复指定文件到工作目录,加--是为了防止有个分支名字加README.md | ||
|
||
### stash | ||
|
||
git stash //暂存修改内容,以消除切换分支的冲突 | ||
|
||
git stash pop //还原 | ||
|
||
git checkout <directory> //对改动的文件或目录放弃所有更改 | ||
|
||
### merge & rebase | ||
|
||
/\* | ||
|
||
merge:master 无修改则直接合并,称为Fast-forward;否则需要修改冲突,然后合并生成一个新的提交-Three-way merge | ||
|
||
rebase:将合并分支的记录添加到被合并分支的后面,需要修改冲突。rebase 后需要将被合并分支的 HEAD 移到最新的位置。与 merge 相比,主要作用是简化提交历史记录,具体的:向 topic 分支中更新 merge 分支,使用 rebase;向 merge 分支导入 topic 分支,先使用 rebase 再使用 merge | ||
|
||
\*/ | ||
|
||
git merge <commit> //将指定分支导入到 HEAD 分支,因此修改前需要用 checkout 切换 | ||
|
||
//使用--no-ff 禁止fast forward,保留merge branch信息 | ||
|
||
git diff <filename> //查看冲突内容 | ||
|
||
git diff --check | ||
|
||
git rebase <branch> | ||
|
||
//出现冲突进行修改后,使用 add,再使用 rebase --continue 继续。否则使用--skip 跳过这次提交,或--abort 撤销 rebase 操作 | ||
|
||
//最后会进入 VIM,可以添加合并说明 | ||
|
||
git rebase -i HEAD~~ //将 HEAD 和 HEAD 前两个提交之间的提交进行修改,squash 汇合,edit 修改.... | ||
|
||
git merge --squash <branch> //将 branch 分支所有提交合并生成新的提交到当前所在分支 | ||
|
||
### diff | ||
|
||
git diff //比较暂存区和工作目录的文件内容 | ||
|
||
```bash | ||
# 出现乱码 | ||
git config --global i18n.commitencoding utf-8 | ||
git config --global i18n.logoutputencoding utf-8 | ||
|
||
export LESSCHARSET=utf-8 # linux bash配置环境变量 | ||
set LESSCHARSET=utf-8 # windows配置环境变量 | ||
``` | ||
|
||
git diff ID1 ID2 //比较仓库中两个快照的差异 | ||
|
||
git diff ID //比较当前工作目录内容和之前快照的差异 | ||
|
||
git diff HEAD //比较当前工作目录内容和当前快照的差异 | ||
|
||
git diff --cached ID | ||
|
||
![git diff](/img/in-post/cs_learning/2022-12-20-gitdiff.png) | ||
|
||
### tag | ||
|
||
//标签是固定的,向 HEAD 添加,分为轻标签和注解标签 | ||
|
||
git tag <tagname> //轻标签 | ||
|
||
git tag -a <tagname> //注解标签,会进入 VIM 写注解 | ||
|
||
git tag -am "<注解>" <tagname> | ||
|
||
git tag -n //显示标签的列表和注解 | ||
|
||
git tag -d <tagname> //删除标签 | ||
|
||
//git checkout -b <branchname> <tagname> //以标签为基础创建并切换新分支,因为 tag 指向的就是一个 commit | ||
|
||
### reverse & reset | ||
|
||
git commit --amend -m "新的描述" //主要用于对最近一次提交(HEAD 所在)添加漏掉的文件或修改注解 | ||
|
||
git revert <commitID/HEAD> //相较于 reset,可以安全的取消过去发布的提交,不会减少历史记录 | ||
|
||
git reset //--soft:只移动 HEAD 位置,只取消提交;--mixed:**默认**,还修改索引,用于复原修改过的索引的状态;--hard:还修改工作树,彻底取消最近的提交 | ||
|
||
//移动 HEAD 指针(--soft) -> 覆盖暂存区域(--mixed,默认)-> 覆盖工作目录(--hard) | ||
|
||
git reset --hard HEAD~ //将 HEAD 回退一个操作,~~即两个 | ||
|
||
git reset --hard ORIG_HEAD //撤销 | ||
|
||
git reset 快照 文件 // 不移动HEAD,只回滚指定文件到暂存区域 | ||
|
||
git rm 文件//删除工作目录和暂存区域的文件,在快照中的要用reset --soft HEAD~ | ||
|
||
git rm -f 文件//如果工作目录和暂存区域内文件内容不同,加-f同时删除两个文件,--cached删除暂存区域内的文件,保留工作目录的文件 | ||
|
||
git rm --cached 文件 | ||
|
||
git mv 旧文件名 新文件名//重命名文件 | ||
|
||
### SSL | ||
|
||
ssh-keygen //创建公钥私钥 | ||
|
||
### checkout和reset的区别 | ||
|
||
reset 命令只将指定文件恢复到暂存区域(--mixed),而 checkout 命令是同时覆盖暂存区域和工作目录。 | ||
|
||
无法使用git reset --hard HEAD~ README.md 命令让 reset 同时覆盖工作目录 |
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.