From 3971e424661a04d50c01abc5627302979acc80e9 Mon Sep 17 00:00:00 2001 From: "ithink.chan" Date: Wed, 8 Jan 2020 16:42:51 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A0=BC=E5=BC=8F;=20?= =?UTF-8?q?=E8=A1=A5=E5=85=85=E7=94=9F=E6=88=90=E5=92=8C=E5=BA=94=E7=94=A8?= =?UTF-8?q?=20Patch=20=E6=96=B9=E6=B3=95.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: ithink.chan --- Software/Applications/Git/Git_使用说明.md | 205 ++++++++++++++++------ 1 file changed, 153 insertions(+), 52 deletions(-) diff --git a/Software/Applications/Git/Git_使用说明.md b/Software/Applications/Git/Git_使用说明.md index be2be84..9a225f9 100644 --- a/Software/Applications/Git/Git_使用说明.md +++ b/Software/Applications/Git/Git_使用说明.md @@ -6,28 +6,38 @@ 在使用 Git 前需要配置好用户名和电子邮件信息,Git 需要使用这些配置信息用于提交代码。在 Git 命令行下,可以使用如下命令设置用户名和电子邮件信息: - git config --global user.name "Your name" - git config --global user.email "Your email" +```sh +git config --global user.name "Your name" +git config --global user.email "Your email" +``` 查看当前配置的用户名和电子邮件信息命令如下: - git config --global user.name - git config --global user.email +```sh +git config --global user.name +git config --global user.email +``` git 访问某些 https 连接会出现 SSL 认证错误,此时可通过全局配置关闭 SSL 认证: - git config --global http.sslVerify "false" +```sh +git config --global http.sslVerify "false" +``` ### Git 与 SSH 如果想访问远程 Git 服务器,则最好通过 SSH 方式。这需要先生成 RSA 密钥,然后将公钥部署到远程服务器上即可。生成 RSA 密钥可使用 OpenSSH,命令如下(Windows 下该命令位于 /\/usr/bin/ 下,可使用 Git Bash 直接访问): - ssh-keygen +```sh +ssh-keygen +``` 之后一路回车,生成文件为: - /.ssh/id_rsa - /.ssh/id_rsa.pub +```sh +/.ssh/id_rsa +/.ssh/id_rsa.pub +``` 其中 id_rsa 为私钥,id_rsa.pub 为公钥,将公钥中的内容拷贝到远程服务器中对应的设置项中即可。 @@ -39,7 +49,9 @@ TortoiseGit 需要额外修改 Settings->Network->SSH 为 C:\Windows\System32\Op 在要进行版本管理的目录下键入 - git init +```sh +git init +``` 命令,可完成软件版本仓库的创建操作,在创建完软件仓库后,该目录下会生成一个名为“.git”的隐藏文件夹,该文件夹下保存了软件的历史和分支等版本信息,通常不需要直接操作该目录。 @@ -47,31 +59,43 @@ TortoiseGit 需要额外修改 Settings->Network->SSH 为 C:\Windows\System32\Op 版本仓库所在文件夹下的文件并不是全部都会被 git 跟踪和管理。如果需要将该文件夹下将某个文件纳入到版本管理中,则需要通过 add 命令添加到 git 仓库中进行跟踪: - git add +```sh +git add +``` 例如: - git add main.c +```sh +git add main.c +``` ## 取消跟踪文件 如果对某个文件取消跟踪,但还需要保留本地文件,则使用如下命令: - git rm --cached +```sh +git rm --cached +``` 如果取消对某个文件的版本管理,并且要删除该文件,则使用如下命令: - git rm --f +```sh +git rm --f +``` ## Clone 仓库 更多的时候,不需要手动创建 git 仓库。git 仓库很可能已经存在于远端服务器或别人的计算机中,这时候我们只需要将其 clone 到本地即可: - git clone +```sh +git clone +``` 例如: - git clone https://192.168.1.8/path/repo.git +```sh +git clone https://192.168.1.8/path/repo.git +``` git 支持 http、https、ssh 格式的 URL 访问。 @@ -79,12 +103,16 @@ git 支持 http、https、ssh 格式的 URL 访问。 在修改代码或相关文件后,需要先将变更缓存到本地,这一步被称作 commit。带签名的提交命令如下: - git add . - git commit -s -m "Message" +```sh +git add . +git commit -s -m "Message" +``` 如果想对上次提交进行修改,或将本次提交与上次提交合并,可为 commit 增加 amend 参数,如下: - git commit --amend +```sh +git commit --amend +``` 之后可通过交互界面进行编辑和修改。 @@ -92,18 +120,24 @@ git 支持 http、https、ssh 格式的 URL 访问。 如果文件尚未 stash,可使用 checkout 命令撤回修改: - git checkout -- +```sh +git checkout -- +``` 如果文件已 stash 但是没有 commit,可使用 reset 命令撤回修改: - git reset HEAD +```sh +git reset HEAD +``` 如果文件已经 commit,可使用下列命令 - git reset --soft - git reset --hard - git reset --hard HEAD~10 - git revert +```sh +git reset --soft +git reset --hard +git reset --hard HEAD~10 +git revert +``` 注意 soft 与 hard 的区别主要在于 hard 不保留工作区中的内容,但是 soft 保留工作区中的内容。而 reset 与 revert 的区别在于 revert 是放弃指定提交的修改,但是会生成一次新的提交,需要填写提交注释,以前的历史记录都在,而reset是指将HEAD指针指到指定提交,历史记录中不会出现放弃的提交记录。 @@ -111,70 +145,100 @@ git 支持 http、https、ssh 格式的 URL 访问。 通过以下命令创建新的本地分支: - git branch +```sh +git branch +``` 还可以通过以下命令查看分支情况: - git branch - git branch -a +```sh +git branch +git branch -a +``` 使用下列命令切换到对应分支: - git checkout +```sh +git checkout +``` 删除某本地分支的命令为: - git branch -d +```sh +git branch -d +``` 删除某远程分支的命令为 - git push --delete +```sh +git push --delete +``` 将某个分支与当前分支合并的命令为: - git merge +```sh +git merge +``` 以下命令为本地分支指定一个与之对应的远程分支: - git branch --set-upstream-to=origin/ +```sh +git branch --set-upstream-to=origin/ +``` ## 查看历史 版本管理提供的最主要的功能之一便是历史追溯,可以查看每一次变更的内容,相关提交的信息等。通过下列命令实现: - git show +```sh +git show +``` ## Tag 节点 可以通过: - git tag +```sh +git tag +``` 命令列出当前仓库中的所有标签,创建一个带附注的的标签则可以使用以下命令实现: - git tag -a -m "Message" +```sh +git tag -a -m "Message" +``` 还可以使用: - git tag +```sh +git tag +``` 创建一个轻量标签。 ## 推送本地分支到远程分支 - git push : +```sh +git push : +``` 如,推送本地的 new 分支与 origin 主机的 master 分支合并: - git push origin new:master +```sh +git push origin new:master +``` ## 从远程分支更新本地分支 - git pull : +```sh +git pull : +``` 如,要取回 origin 主机的 new 分支,与本地的 master 分支合并: - git pull origin new:master +```sh +git pull origin new:master +``` 如果远程仓库有所变更,但本地代码没有更新就进行了 commit,在使用 git pull 的时候会进行自动 merge,如果有冲突则需要手动解决。 @@ -182,39 +246,55 @@ git 支持 http、https、ssh 格式的 URL 访问。 删除远程分支命令为: - git push origin --delete +```sh +git push origin --delete +``` 删除远程 Tag 的命令为: - git push origin --delete tag +```sh +git push origin --delete tag +``` 如果远程分支/Tab 已经删除,需要同步到本地,可使用以下命令: - git remote prune +```sh +git remote prune +``` ## 推送/获取 Tag 推送本地 Tag 到远程的命令为: - git push --tags +```sh +git push --tags +``` 从远程获取 Tag 到本地的命令为: - git fetch origin tag +```sh +git fetch origin tag +``` ## Rebase 由于合并分支,或从远程仓库中更新代码产生了额外的 merge 节点,此时可通过 rebase 命令消除这些额外的 merge 节点,使 git 历史的线性更好: - git rebase [-i] [upstream] +```sh +git rebase [-i] [upstream] +``` 通过增加 -i 参数可进入交互模式。使用 Rebase 还可以将多次提交进行合并,或设置起止点。 - git rebase [-i] [start point] [end point] +```sh +git rebase [-i] [start point] [end point] +``` 如果发生了冲突,可以在解决冲突并 add 后,通过: - git rebase --continue +```sh +git rebase --continue +``` 命令继续 rebase。 @@ -222,10 +302,31 @@ git 支持 http、https、ssh 格式的 URL 访问。 基本原理是增加上游仓库,然后进行 fetch 和 merge,最后 push 到当前仓库,如果已经添加了上游仓库,无需再次添加。 - git remote add upstream - git fetch upstream - git merge upstream/master - git push +```sh +git remote add upstream +git fetch upstream +git merge upstream/master +git push +``` + +## Patch + +### 生成 Patch + +先 git log 看一下有哪些提交,然后看一下要从那个 commit id 开始生成 Patch。然后从 commit id 开始(不包含该 commit id)生成 Patch: + +```sh +git format-patch +``` + +### 应用 Patch + +将所有 Patch 拷贝到某一文件夹下,然后: + +```sh +git am --abort +git am /*.patch +``` ## 参考