Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
P1anet committed Aug 24, 2023
1 parent 6364c9f commit abe89f0
Show file tree
Hide file tree
Showing 14 changed files with 3,542 additions and 157 deletions.
3 changes: 2 additions & 1 deletion _config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:"
Expand Down
337 changes: 203 additions & 134 deletions _posts/cs_learning/2022-12-20-git.md
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
```

## 核心架构

- 工作区域&emsp;&emsp;Working Directory&emsp;&emsp;modified
- 暂存区域&emsp;&emsp;Stage(Index)&emsp;&emsp;&emsp;&emsp;&emsp;staged
- Git仓库&emsp;&emsp;Repository(HEAD)&emsp;&emsp;&emsp;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 同时覆盖工作目录
22 changes: 0 additions & 22 deletions _posts/cs_learning/2022-12-20-linux.md

This file was deleted.

Loading

0 comments on commit abe89f0

Please sign in to comment.