From 81ab954a6e39350113ab542693f1ee362882ca1c Mon Sep 17 00:00:00 2001 From: "rick.chan" Date: Fri, 14 Aug 2020 14:41:06 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=20diff=20=E5=92=8C=20rebase?= =?UTF-8?q?=20=E5=86=85=E5=AE=B9.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: rick.chan --- Software/Applications/Git/Git_使用说明.md | 89 +++++++++++++++-------- 1 file changed, 59 insertions(+), 30 deletions(-) diff --git a/Software/Applications/Git/Git_使用说明.md b/Software/Applications/Git/Git_使用说明.md index 36975f3..eb1d92a 100644 --- a/Software/Applications/Git/Git_使用说明.md +++ b/Software/Applications/Git/Git_使用说明.md @@ -1,8 +1,8 @@ # Git 使用说明 -## 1. 初始配置 +## 1.初始配置 -### 1.1. Git 初始配置 +### 1.1.Git 初始配置 在使用 Git 前需要配置好用户名和电子邮件信息,Git 需要使用这些配置信息用于提交代码。在 Git 命令行下,可以使用如下命令设置用户名和电子邮件信息: @@ -30,7 +30,7 @@ git config --global http.sslVerify "false" git config --global http.postBuffer 524288000 ``` -### 1.2. Git 与 SSH +### 1.2.Git 与 SSH 如果想访问远程 Git 服务器,则最好通过 SSH 方式。这需要先生成 RSA 密钥,然后将公钥部署到远程服务器上即可。生成 RSA 密钥可使用 OpenSSH,命令如下(Windows 下该命令位于 /\/usr/bin/ 下,可使用 Git Bash 直接访问): @@ -49,7 +49,7 @@ ssh-keygen TortoiseGit 需要额外修改 Settings->Network->SSH 为 C:\Windows\System32\OpenSSH\ssh.exe 才可以通过 OpenSSH 密钥来访问服务器。否则默认使用 PuTTY 格式密钥。 -## 2. 创建仓库 +## 2.创建仓库 软件版本管理依赖于软件仓库的概念,一个软件仓库包容了要进行版本管理的源码和 Release 发布等内容。 @@ -61,7 +61,7 @@ git init 命令,可完成软件版本仓库的创建操作,在创建完软件仓库后,该目录下会生成一个名为“.git”的隐藏文件夹,该文件夹下保存了软件的历史和分支等版本信息,通常不需要直接操作该目录。 -## 3. 添加跟踪文件 +## 3.添加跟踪文件 版本仓库所在文件夹下的文件并不是全部都会被 git 跟踪和管理。如果需要将该文件夹下将某个文件纳入到版本管理中,则需要通过 add 命令添加到 git 仓库中进行跟踪: @@ -75,7 +75,7 @@ git add git add main.c ``` -## 4. 取消跟踪文件 +## 4.取消跟踪文件 如果对某个文件取消跟踪,但还需要保留本地文件,则使用如下命令: @@ -89,7 +89,7 @@ git rm --cached git rm --f ``` -## 5. Clone 仓库 +## 5.Clone 仓库 更多的时候,不需要手动创建 git 仓库。git 仓库很可能已经存在于远端服务器或别人的计算机中,这时候我们只需要将其 clone 到本地即可: @@ -105,7 +105,7 @@ git clone https://192.168.1.8/path/repo.git git 支持 http、https、ssh 格式的 URL 访问。 -## 6. 提交变更 +## 6.提交变更 在修改代码或相关文件后,需要先将变更缓存到本地,这一步被称作 commit。带签名的提交命令如下: @@ -122,7 +122,7 @@ git commit --amend 之后可通过交互界面进行编辑和修改。 -## 7. 时光穿梭 +## 7.时光穿梭 如果文件尚未 stash,可使用 checkout 命令撤回修改: @@ -147,7 +147,7 @@ git revert 注意 soft 与 hard 的区别主要在于 hard 不保留工作区中的内容,但是 soft 保留工作区中的内容。而 reset 与 revert 的区别在于 revert 是放弃指定提交的修改,但是会生成一次新的提交,需要填写提交注释,以前的历史记录都在,而reset是指将HEAD指针指到指定提交,历史记录中不会出现放弃的提交记录。 -## 8. 分支管理 +## 8.分支管理 通过以下命令创建新的本地分支: @@ -183,6 +183,7 @@ git push --delete 将某个分支与当前分支合并的命令为: ```bash +# merge 谋 branch 到当前分支. git merge ``` @@ -192,7 +193,7 @@ git merge git branch --set-upstream-to=origin/ ``` -## 9. 查看历史 +## 9.查看历史 版本管理提供的最主要的功能之一便是历史追溯,可以查看每一次变更的内容,相关提交的信息等。通过下列命令实现: @@ -205,7 +206,26 @@ git whatchanged [path] git show ``` -## 10. Tag 节点 +## 10.内容比较 + +使用 + +```bash +git diff +``` + +命令可比较任意两组内容,例如: + +```bash +# 比较谋更改的文件/文件夹与当前分支上次提交内容的差异 +git diff +# 比较两个分支 或 两个分支的谋文件/文件夹 +git diff [file/folder] +# 比较当前分支下两次提交 或 两次提交的谋文件/文件夹 +git diff [file/folder] +``` + +## 11.Tag 节点 可以通过: @@ -227,7 +247,7 @@ git tag 创建一个轻量标签。 -## 11. 推送本地分支到远程分支 +## 12.推送本地分支到远程分支 ```bash git push : @@ -239,7 +259,7 @@ git push : git push origin new:master ``` -## 12. 从远程分支更新本地分支 +## 13.从远程分支更新本地分支 ```bash git pull : @@ -259,7 +279,7 @@ git pull origin new:master git fetch origin tag ``` -## 13. 删除远程分支/Tag +## 14.删除远程分支/Tag 删除远程分支命令为: @@ -279,7 +299,7 @@ git push origin --delete tag git remote prune ``` -## 14. 推送/获取 Tag +## 15.推送/获取 Tag 将本地 Tag 同步到远程的命令为: @@ -293,7 +313,7 @@ git push --tags [-f] git pull --tags [-f] ``` -## 15. Rebase +## 16.Rebase 由于合并分支,或从远程仓库中更新代码产生了额外的 merge 节点,此时可通过 rebase 命令消除这些额外的 merge 节点,使 git 历史的线性更好: @@ -313,9 +333,18 @@ git rebase [-i] [start point] [end point] git rebase --continue ``` +也可以使用 rebase 直接从另一分支合并代码,从而避免像 merge 那样增加额外节点(相当于 merge 之后再进行一次 rebase 操作): + +```bash +# 从谋 branch rebase 合并到当前分支 +git rebase +# 从谋 from branch rebase 合并到 to branch +git rebase +``` + 命令继续 rebase。 -## 16. 同步 fork 的仓库 +## 17.同步 fork 的仓库 基本原理是增加上游仓库,然后进行 fetch 和 merge,最后 push 到当前仓库,如果已经添加了上游仓库,无需再次添加。 @@ -326,9 +355,9 @@ git merge upstream/master git push ``` -## 17. Patch +## 18.Patch -### 17.1. 生成 Patch +### 18.1.生成 Patch ```bash # 生成最近的 1 次 commit 的 patch @@ -345,7 +374,7 @@ git format-patch -1 git format-patch --root ``` -### 17.2. 应用 Patch +### 18.2.应用 Patch 将所有 Patch 拷贝到某一文件夹下,然后: @@ -360,7 +389,7 @@ git am --abort git am --resolved ``` -### 17.3. 合并多个 Patch +### 18.3.合并多个 Patch ```bash # 先应用 patch @@ -371,9 +400,9 @@ git rebase -i HEAD~n git format-patch HEAD^ ``` -## 18. Submodule +## 19.Submodule -### 18.1. 添加 Submodule +### 19.1.添加 Submodule 在主仓库中: @@ -390,7 +419,7 @@ git commit -sm git push ``` -### 18.2. 在其他地方使用合并后的版本库 +### 19.2.在其他地方使用合并后的版本库 ```bash git clone @@ -398,7 +427,7 @@ cd git submodule init && git submodule update ``` -### 18.3. 更新合并后的版本库 +### 19.3.更新合并后的版本库 ```bash cd @@ -407,7 +436,7 @@ cd .. git commit [...] ``` -### 18.4. 批量操作 +### 19.4.批量操作 ```bash git submodule foreach @@ -416,11 +445,11 @@ git submodule foreach git checkout master git submodule foreach git submodule update ``` -### 18.5 如何保持 Submodule 的同步 +### 19.5.如何保持 Submodule 的同步 如果对第三方 Submodule 进行了定制,但是处于某些原因这些修改并不能提交到远程去。那就要先 fork 第三方仓库,然后在 fork 的基础上添加 Submodule。之后自己的修改或第三方有更新都同步到 fork 的仓库上。 -### 18.6 删除 Submodule +### 19.6.删除 Submodule ```bash # deinit @@ -429,7 +458,7 @@ git submodule deinit git rm ``` -## 外部参考资料 +## 20.外部参考资料 1. [Pro Git](https://git-scm.com/book/zh/v2) 2. [Git Reference Manual](https://git-scm.com/docs)