这篇文章偏向于实战和速查,如果想要系统学习相关知识,可以关注一下我后面的参考博客
- Git 的配置
- Git 的基本操作
- Github 如何进行 分支操作以及日常开发中常用的操作。
Git 的相关配置
我的配置是在我的远程云服务器上面进行安装配置的,因为日后我们的工作环境大都在 linux 服务器上,win 的用户可以使用 WSL 虚拟机,然后用 Xshell 进行连接效果差不多。 输入命令 git,如果安装了就会出现各种提示。如果没有安装直接 sudo apt-get install git 进行安装,安装成功之后如下图所示。
git
sudo apt-get install git
下面安装成功之后,我们需要简单配置一下账号和密码,将 git 和自己的账号密码进行配置,命令如下:
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
Linux 系统下如果没有出现结果,代表实现正常,正常运行。
如果想要查看 git 的配置信息,可以使用 git config --list,来进行查看。
日常我们使用往往将自己的程序托管到远程的服务器上面,需要配置一下远程的仓库
首先我们登录 github 新建一个 github 仓库,
接着我们到自己电脑下运行
git remote add origin git@github.com:sxxx/gittest.git
接下来使用 git push -u origin master 来进行将本地仓库推送到远程仓库。但是这里遇到问题无法从远程仓库读取。
Permission denied (publickey).fatal: Could not read from remote repository.
参考了一下网上的解决方法:需要重新生成一下公钥然后再进行配置,接下来在 linux 平台下进行配置 SSH 秘钥。
:~/.ssh# cd ~/.ssh
root@hecs-365841:~/.ssh# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:bp7By5DxzcfZiFFZ6huKEYVqM1+dHK9/Kf+SrLapKd4 root@hecs-365841
The key's randomart image is:
+---[RSA 3072]----+
| .. . |
| .. .+ |
| .. o++ |
| = ..o+ . |
| ..+S.. o. |
| *.= =.* |
| o B = *o…|
| =.= o.o=..|
| .*.Eo+oo+o|
+----[SHA256]-----+
root@hecs-365841:~/.ssh# ll
total 20
drwx------ 2 root root 4096 Aug 15 20:37 ./
drwx------ 7 root root 4096 Aug 15 18:04 ../
-rw------- 1 root root 0 Aug 7 16:55 authorized_keys
-rw------- 1 root root 2602 Aug 15 20:37 id_rsa
-rw-r--r-- 1 root root 570 Aug 15 20:37 id_rsa.pub
-rw-r--r-- 1 root root 142 Aug 15 20:22 known_hosts
root@hecs-365841:~/.ssh# cat id_rsa.pub
我们首先进入到 ssh 文件夹,接下来使用 ssh-keygen 生成秘钥 接下来进入 id_rsa.pub 将其保存到 github 的 SSH and GPG keys 当中。 最终再次推送到远程仓库,运行成功。
Git 的基本使用
- 进入一个自己 git 的文件夹
- Git init
所有的 git 的相关的版本追踪都是将文件转化成为二进制数据进行版本追踪,比如一个图片 100 k,我们截取了一部分只剩下 50 k 了提交了。Git 对比文件大小发现数据发生了变化要求你进行处理冲突。因此我们往往使用 git 对于文件的形式进行处理。
我们这里使用 vim 创建一个简单的 txt 文件来对其进行处理,下面是 vim 的基本操作。
I(insert 的缩写)插入模式可以输入文本
:w 保存文件
:q 退出文件
按键 ESC 退出模式
我们将这个文件通过 git add 命令,放到我们我们前面 git init 生成的 .git 目录当中,这个目录对应着我们电脑当中的暂存区。
而 git-commit 命令则代表了我们的将暂存区的内容推送到本地的仓库。
这张图片很好的说明了 git 的运行原理,我们的工作区域 workspace,使用 add 命令加入到暂存区,使用 commit 加入到局部仓库,push 命令推送到远程仓库。使用 fetch 或者 clone 命令将代码从远程仓库更新或者下载到本地仓库,使用 pull 命令将远程仓库内容直接下载到工作区。Local repository 可能有多个分支通过 checkout 进行切换。
Git 的常见命令实践
这里列出了使用频率比较高的常见命令,为了自己以后忘记的时候可以多次回顾。
git clone <repo> <directory>
其中
- **repo:**Git 仓库。
- **directory:**本地目录。 我们一般用于第一次从远程下载仓库数据。
git status
我们接着对上面的 txt 进行修改,接着使用 git-status 进行查看相关修改,结果如下,git 发现有内容没有 commit。
如果我们想要查看修改的内容是什么,使用 git-diff,会详细展示我们的修改内容是什么,我的例子当中新增了一句话。
我们将其 add 之后查看其 status,其结果如下:显示需要 commit git commit -m "自己的修改部分"
最后我们将结果推送到本地仓库,其结果如下。
如果我们发现,目前的 git 的版本出现问题了需要进行回退,我们可以使用 git log 命令查看已经推送的版本,并且使用 git reset --hard HEAD^ ;来返回上一个版本,这时候 git status 的最新版本信息已经消失了。如果我们想要回到最新版本可以使用 git reset --hard gitlog中的版本编号 。通过这个方式可以自由的进行切换版本的更新和返回。
如果我们进行提交了修改,发现修改需要撤回,可以使用git checkout -- file 命令来进行。
可以直接在文件删除,但是也可以使用 git checkout -- file,发现文章回复原样。
下面对于常见情况的小结:
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令
git checkout -- file。场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令
git reset HEAD <file>,就回到了场景1,第二步按场景1操作。场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退,不过前提是没有推送到远程库。
我们删除文件的时候,可以使用 git rm 来专门删除某个文件,然后将其推送到本地仓库。此外我们也可以使用 git checkout -- file 来对误删除的内容进行恢复。
接下来到了我们的分支部分:
首先我们创建并切换到一个新的分支,
git checkout -b dev
git checkout 命令加上 -b 参数表示创建并切换,相当于以下两条命令
git branch dev
git checkout dev
列出分支基本命令:
git branch
其中有*代表当前分支
接下来我们对 dev 分支的 test. Txt 文件进行修改之后提交。
接下来我们切换回我们原本分支,
git switch master
接下来对成果进行合并,并将 dev 分支删除,以及查看分支
git merge dev
git branch -d dev
git branch
接下来,我们需要进入到 git 的处理分支部分,创建一个新的分支,并且修改一下文件内容,然后返回原本的分支也对文件进行修改,最后也进行提交。因为两个分支都对文件进行了修改,会提示你进行处理冲突。
git switch -c feature1
vim test.txt
git add test.txt
git commit test.txt -m "分支1进行修改的提交"
git switch master
vim test.txt
git add test.txt
git commit test.txt -m "分支2进行修改的提交"
对分支1和分支2都修改后进行提交,然后我们merge合并一下会出现问题。
git merge feature1
无法进行合并,需要我们手动进行修改,我们使用 cat test.txt
修改完成之后使用 git commit -m "conflict fixed"来进行合并冲突,使用 git log --graph --pretty=oneline --abbrev-commit 来观看相关的合并的可视化展开。
bug 分支,feature 分支和 rebase 没有讲。
Bug 分支是指,我们当前环境下以及有未保存的代码,但是需要去修改新的 bug,可以使用临时的分支。可以使用 git stash 来进行开发。
下面是使用 bug 分支的一整个流程,进行一些详细介绍,git stash 是将现在的未保存数据先冻结,接下来切换到了 master 主分支,我们创建一个新的分支来解决 bug。当我们解决完成 bug 返回自己的工作进行合并。注意加上 --no-ff 参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,如果不加默认看不出来合并。
git stash
git checkout master
git checkout -b issue-101
vim test.txt
git add test.txt
git commit -m "fix bug 101"
git switch master
git merge --no-ff -m "merged bug fix 101" issue-101
git switch dev
下面是我们对于 bug 分支进行恢复,我们通过 git stash list 返回曾经的 stash 列表,使用 apply 和 drop 进行回复删除,使用 pop 命令进行回复。
git status
git stash list
git stash apply
git stash drop
git stash pop
Feature 分支代表我们如果开发一个新功能,需要建立一个新的分支,开发完成之后再与原本的代码进行合并。
相关流程实现如下
git switch -c feature-vulcan
git add vulcan.py
git status
git commit -m "add feature vulcan"
git switch dev
git branch -D feature-vulcan
Rebase 是指我们经常合并非常的乱,可以使用这个命令将 git 的提交历史变直,而非之前的乱七八糟的合并,使用 git rebase 可以解决这个问题。 正常情况下,我们多次合并修改代码 git 仓库的分支如下,非常的杂乱。 通过使用rebase可以将分支给变修整。
下面是 git 分支相关的常见命令速查
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>或者git switch <name>
创建+切换分支:git checkout -b <name>或者git switch -c <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
参考文章: Git 的相关博客
- 廖雪峰的 git 教程
- 青训营的 git 教程
- Chatgpt 推荐的 git 教程
- 菜鸟教程
- Git 的权威指南