Skip to content

Commit abe89f0

Browse files
committed
update
1 parent 6364c9f commit abe89f0

14 files changed

+3542
-157
lines changed

_config.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020

2121
title: Kenshin Blog
2222
SEOTitle: 建新的博客 | Kenshin Blog
23-
header-img: img/dogs_running.gif # home-bg.jpg
23+
header-img: img/dogs_running.gif
24+
name: 朱建新
2425
2526
keyword: "建新, Kenshin, 建新的博客, Kenshin Blog, 博客, 个人网站, 互联网, AI, 系统, 体系结构"
2627
description: >- # this means to ignore newlines until "baseurl:"

_posts/cs_learning/2022-12-20-git.md

Lines changed: 203 additions & 134 deletions
Original file line numberDiff line numberDiff line change
@@ -1,134 +1,203 @@
1-
---
2-
layout: post
3-
title: "git学习笔记(未完)"
4-
subtitle: "Learning to use git"
5-
date: 2022-12-20
6-
author: "Kenshin"
7-
header-img: "img/post-bg/post-bg-default.png"
8-
tags:
9-
- LearnCS
10-
---
11-
12-
### 基本
13-
14-
git add <文件名/目录名> //提交到索引
15-
16-
git commit -m '<说明>' //将索引区域内容提交到本地仓库
17-
18-
git status //查看当前 git 状态,有无新的变更
19-
20-
git log //查看提交记录
21-
22-
//指定--graph 以文本形式显示更新记录的流程图,指定--oneline 在一行中显示提交的信息
23-
24-
//使用 git config --global alias.lg "log --graph --oneline" 添加别名 lg 方便使用
25-
26-
//使用 git config --global core.quotepath off 显示中文字符
27-
28-
### 推送
29-
30-
git remote add <name> <repository> //添加远程数据库并起别名,建议为 origin(默认)
31-
32-
git push <repository> <refspec> //指定推送目标地址和推送的分支,不存在的分支会直接创建
33-
34-
git push -u <repository> <refspec> //使用-u 选项则下一次推送就可以省略分支名称
35-
36-
### 克隆
37-
38-
git clone <repository> <directory>
39-
40-
git push //克隆的仓库推送时可以省略名称
41-
42-
### 拉取
43-
44-
git pull <repository> <refspec> //仓库省略则拉取到 origin,分支省略则拉取到 master
45-
46-
//pull 后解决冲突后才能再 push
47-
48-
git fetch//查看远程更新历史记录,存放到 FETCH_HEAD
49-
50-
### 分支
51-
52-
//Merge 分支和 Topic 分支,如以 master 作为 merge 分支,创建 topic 分支以进行修改,测试 bug 等
53-
54-
git branch //查看分支状态,-a 看远程(要先 fetch)
55-
56-
git branch <branchname> //创建分支
57-
58-
//HEAD 指向现在使用中的分支的最后一次更新
59-
60-
git checkout <branch> //切换分支
61-
62-
git checkout -b <branch> <commitID/branch>//创建并切换分支,可选的创建基于选项,可以是 remote branch(要先 fetch)
63-
64-
git branch -d <branch> //删除分支,必须先离开;分支之间历史记录不一致需要先合并(使用-D 强制删除)
65-
66-
//切换分支不会丢失未提交的索引区域或工作树的内容
67-
68-
### stash
69-
70-
​ git stash //暂存修改内容,以消除切换分支的冲突
71-
72-
​ git stash pop //还原
73-
74-
​ git checkout <directory> //对改动的文件或目录放弃所有更改
75-
76-
### 合并分支
77-
78-
/\*
79-
80-
merge:master 无修改则直接合并,称为 fast-forward;否则需要修改冲突,然后合并生成一个新的提交
81-
82-
rebase:将合并分支的记录添加到被合并分支的后面,需要修改冲突。rebase 后需要将被合并分支的 HEAD 移到最新的位置。与 merge 相比,主要作用是简化提交历史记录,具体的:向 topic 分支中更新 merge 分支,使用 rebase;向 merge 分支导入 topic 分支,先使用 rebase 再使用 merge
83-
84-
\*/
85-
86-
git merge <commit> //将指定分支导入到 HEAD 分支,因此修改前需要用 checkout 切换
87-
88-
git diff <filename> //查看冲突内容
89-
90-
git diff --check
91-
92-
git rebase <branch>
93-
94-
//出现冲突进行修改后,使用 add,再使用 rebase --continue 继续。否则使用--skip 跳过这次提交,或--abort 撤销 rebase 操作
95-
96-
//最后会进入 VIM,可以添加合并说明
97-
98-
git rebase -i HEAD~~ //将 HEAD 和 HEAD 前两个提交之间的提交进行修改,squash 汇合,edit 修改....
99-
100-
git merge --squash <branch> //将 branch 分支所有提交合并生成新的提交到当前所在分支
101-
102-
### 标签
103-
104-
//标签是固定的,向 HEAD 添加,分为轻标签和注解标签
105-
106-
git tag <tagname> //轻标签
107-
108-
git tag -a <tagname> //注解标签,会进入 VIM 写注解
109-
110-
git tag -am "<注解>" <tagname>
111-
112-
git tag -n //显示标签的列表和注解
113-
114-
git tag -d <tagname> //删除标签
115-
116-
//git checkout -b <branchname> <tagname> //以标签为基础创建并切换新分支,因为 tag 指向的就是一个 commit
117-
118-
### 修改
119-
120-
git commit --amend -m "新的描述" //主要用于对最近一次提交(HEAD 所在)添加漏掉的档案或修改注解
121-
122-
git revert <commitID/HEAD> //相较于 reset,可以安全的取消过去发布的提交,不会减少历史记录
123-
124-
git reset //--soft:只移动 HEAD 位置,只取消提交;--mixed:还修改索引,用于复原修改过的索引的状态;--hard:还修改工作树,彻底取消最近的提交
125-
126-
git reset --hard HEAD~ //将 HEAD 回退一个操作,~~即两个
127-
128-
git reset --hard ORIG_HEAD //撤销
129-
130-
### SSL
131-
132-
ssh-keygen //创建公钥私钥
133-
134-
.....
1+
---
2+
layout: post
3+
title: "Git - 版本控制工具"
4+
subtitle: "Version Control Tool - Git"
5+
date: 2022-12-20
6+
author: "Kenshin"
7+
header-img: "img/post-bg/post-bg-default.png"
8+
tags:
9+
- LearnCS
10+
---
11+
12+
# Git - 版本控制工具
13+
14+
## 基础配置
15+
16+
```
17+
git config --global user.name <YourName>
18+
git config --global user.email <YourEMail>
19+
git config --list --global
20+
```
21+
22+
## 核心架构
23+
24+
- 工作区域&emsp;&emsp;Working Directory&emsp;&emsp;modified
25+
- 暂存区域&emsp;&emsp;Stage(Index)&emsp;&emsp;&emsp;&emsp;&emsp;staged
26+
- Git仓库&emsp;&emsp;Repository(HEAD)&emsp;&emsp;&emsp;commited
27+
28+
### basic
29+
30+
git add <文件名/目录名> //提交到索引
31+
32+
git commit -m "<说明>" //将索引区域内容提交到本地仓库
33+
34+
git commit -am "<说明>" //从工作区提交到本地仓库
35+
36+
git status //查看当前 git 状态,有无新的变更
37+
38+
git log //查看提交记录
39+
40+
//指定--graph 以文本形式显示更新记录的流程图,指定--oneline 在一行中显示提交的信息
41+
42+
//使用 git config --global alias.lg "log --graph --oneline" 添加别名 lg 方便使用
43+
44+
git log --oneline --decorate --graph --all
45+
46+
//使用 git config --global core.quotepath off 显示中文字符
47+
48+
git reflog //记录的每一次操作的版本ID号
49+
50+
### push
51+
52+
git remote add <name> <repository> //添加远程数据库并起别名,建议为 origin(默认)
53+
54+
git push <repository> <refspec> //指定推送目标地址和推送的分支,不存在的分支会直接创建
55+
56+
git push -u <repository> <refspec> //使用-u 选项则下一次推送就可以省略分支名称
57+
58+
### clone
59+
60+
git clone <repository> <directory>
61+
62+
git push //克隆的仓库推送时可以省略名称
63+
64+
### pull
65+
66+
git pull <repository> <refspec> //仓库省略则拉取到 origin,分支省略则拉取到 master
67+
68+
git fetch//查看远程更新历史记录,存放到 FETCH_HEAD
69+
70+
### branch
71+
72+
//Merge 分支和 Topic 分支,如以 master 作为 merge 分支,创建 topic 分支以进行修改,测试 bug 等
73+
74+
git branch //查看分支状态,-a 看远程(要先 fetch)
75+
76+
git branch <branchname> //创建分支
77+
78+
//HEAD 指向现在使用中的分支的最后一次更新
79+
80+
git checkout <branch> //切换分支
81+
82+
git checkout -b <branch> <commitID/branch>//创建并切换分支,可选的创建基于选项,可以是 remote branch(要先 fetch)
83+
84+
git branch -d <branch> //删除分支,必须先离开;分支之间历史记录不一致需要先合并(使用-D 强制删除)
85+
86+
//切换分支不会丢失未提交的索引区域或工作树的内容,但会丢弃匿名分支的所有修改
87+
88+
### checkout
89+
90+
//从历史快照(或者暂存区域)中拷贝文件到工作目录
91+
92+
git checkout HEAD~ README.md //从指定的提交中拷贝文件到暂存区域和工作目录
93+
94+
git checkout -- README.md //如果命令中没有指定具体的快照 ID,则将从暂存区域恢复指定文件到工作目录,加--是为了防止有个分支名字加README.md
95+
96+
### stash
97+
98+
​ git stash //暂存修改内容,以消除切换分支的冲突
99+
100+
​ git stash pop //还原
101+
102+
​ git checkout <directory> //对改动的文件或目录放弃所有更改
103+
104+
### merge & rebase
105+
106+
/\*
107+
108+
merge:master 无修改则直接合并,称为Fast-forward;否则需要修改冲突,然后合并生成一个新的提交-Three-way merge
109+
110+
rebase:将合并分支的记录添加到被合并分支的后面,需要修改冲突。rebase 后需要将被合并分支的 HEAD 移到最新的位置。与 merge 相比,主要作用是简化提交历史记录,具体的:向 topic 分支中更新 merge 分支,使用 rebase;向 merge 分支导入 topic 分支,先使用 rebase 再使用 merge
111+
112+
\*/
113+
114+
git merge <commit> //将指定分支导入到 HEAD 分支,因此修改前需要用 checkout 切换
115+
116+
//使用--no-ff 禁止fast forward,保留merge branch信息
117+
118+
git diff <filename> //查看冲突内容
119+
120+
git diff --check
121+
122+
git rebase <branch>
123+
124+
//出现冲突进行修改后,使用 add,再使用 rebase --continue 继续。否则使用--skip 跳过这次提交,或--abort 撤销 rebase 操作
125+
126+
//最后会进入 VIM,可以添加合并说明
127+
128+
git rebase -i HEAD~~ //将 HEAD 和 HEAD 前两个提交之间的提交进行修改,squash 汇合,edit 修改....
129+
130+
git merge --squash <branch> //将 branch 分支所有提交合并生成新的提交到当前所在分支
131+
132+
### diff
133+
134+
git diff //比较暂存区和工作目录的文件内容
135+
136+
```bash
137+
# 出现乱码
138+
git config --global i18n.commitencoding utf-8
139+
git config --global i18n.logoutputencoding utf-8
140+
141+
export LESSCHARSET=utf-8 # linux bash配置环境变量
142+
set LESSCHARSET=utf-8 # windows配置环境变量
143+
```
144+
145+
git diff ID1 ID2 //比较仓库中两个快照的差异
146+
147+
git diff ID //比较当前工作目录内容和之前快照的差异
148+
149+
git diff HEAD //比较当前工作目录内容和当前快照的差异
150+
151+
git diff --cached ID
152+
153+
![git diff](/img/in-post/cs_learning/2022-12-20-gitdiff.png)
154+
155+
### tag
156+
157+
//标签是固定的,向 HEAD 添加,分为轻标签和注解标签
158+
159+
git tag <tagname> //轻标签
160+
161+
git tag -a <tagname> //注解标签,会进入 VIM 写注解
162+
163+
git tag -am "<注解>" <tagname>
164+
165+
git tag -n //显示标签的列表和注解
166+
167+
git tag -d <tagname> //删除标签
168+
169+
//git checkout -b <branchname> <tagname> //以标签为基础创建并切换新分支,因为 tag 指向的就是一个 commit
170+
171+
### reverse & reset
172+
173+
git commit --amend -m "新的描述" //主要用于对最近一次提交(HEAD 所在)添加漏掉的文件或修改注解
174+
175+
git revert <commitID/HEAD> //相较于 reset,可以安全的取消过去发布的提交,不会减少历史记录
176+
177+
git reset //--soft:只移动 HEAD 位置,只取消提交;--mixed:**默认**,还修改索引,用于复原修改过的索引的状态;--hard:还修改工作树,彻底取消最近的提交
178+
179+
//移动 HEAD 指针(--soft) -> 覆盖暂存区域(--mixed,默认)-> 覆盖工作目录(--hard)
180+
181+
git reset --hard HEAD~ //将 HEAD 回退一个操作,~~即两个
182+
183+
git reset --hard ORIG_HEAD //撤销
184+
185+
git reset 快照 文件 // 不移动HEAD,只回滚指定文件到暂存区域
186+
187+
git rm 文件//删除工作目录和暂存区域的文件,在快照中的要用reset --soft HEAD~
188+
189+
git rm -f 文件//如果工作目录和暂存区域内文件内容不同,加-f同时删除两个文件,--cached删除暂存区域内的文件,保留工作目录的文件
190+
191+
git rm --cached 文件
192+
193+
git mv 旧文件名 新文件名//重命名文件
194+
195+
### SSL
196+
197+
ssh-keygen //创建公钥私钥
198+
199+
### checkout和reset的区别
200+
201+
reset 命令只将指定文件恢复到暂存区域(--mixed),而 checkout 命令是同时覆盖暂存区域和工作目录。
202+
203+
无法使用git reset --hard HEAD~ README.md 命令让 reset 同时覆盖工作目录

_posts/cs_learning/2022-12-20-linux.md

Lines changed: 0 additions & 22 deletions
This file was deleted.

0 commit comments

Comments
 (0)