Git 的正确使用姿势与最佳实践:团队协作和版本控制的最佳实践| 青训营

95 阅读9分钟

这篇文章偏向于实战和速查,如果想要系统学习相关知识,可以关注一下我后面的参考博客

  1. Git 的配置
  2. Git 的基本操作
  3. Github 如何进行 分支操作以及日常开发中常用的操作。

Git 的相关配置

我的配置是在我的远程云服务器上面进行安装配置的,因为日后我们的工作环境大都在 linux 服务器上,win 的用户可以使用 WSL 虚拟机,然后用 Xshell 进行连接效果差不多。 输入命令 git,如果安装了就会出现各种提示。如果没有安装直接 sudo apt-get install git 进行安装,安装成功之后如下图所示。

git
sudo apt-get install git

Pasted image 20230815164845.png

下面安装成功之后,我们需要简单配置一下账号和密码,将 git 和自己的账号密码进行配置,命令如下:

git config --global user.name "Your Name"
git config --global user.email "email@example.com"

Linux 系统下如果没有出现结果,代表实现正常,正常运行。 如果想要查看 git 的配置信息,可以使用 git config --list,来进行查看。 Pasted image 20230815165856.png 日常我们使用往往将自己的程序托管到远程的服务器上面,需要配置一下远程的仓库 首先我们登录 github 新建一个 github 仓库, 接着我们到自己电脑下运行

 git remote add origin git@github.com:sxxx/gittest.git

接下来使用 git push -u origin master 来进行将本地仓库推送到远程仓库。但是这里遇到问题无法从远程仓库读取。

Pasted image 20230815203114.png

Permission denied (publickey).fatal: Could not read from remote repository.

参考了一下网上的解决方法:需要重新生成一下公钥然后再进行配置,接下来在 linux 平台下进行配置 SSH 秘钥。

Pasted image 20230815204109.png

:~/.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 当中。 最终再次推送到远程仓库,运行成功。

Pasted image 20230815204525.png

Git 的基本使用

  1. 进入一个自己 git 的文件夹
  2. Git init Pasted image 20230815170618.png

所有的 git 的相关的版本追踪都是将文件转化成为二进制数据进行版本追踪,比如一个图片 100 k,我们截取了一部分只剩下 50 k 了提交了。Git 对比文件大小发现数据发生了变化要求你进行处理冲突。因此我们往往使用 git 对于文件的形式进行处理。 我们这里使用 vim 创建一个简单的 txt 文件来对其进行处理,下面是 vim 的基本操作。 I(insert 的缩写)插入模式可以输入文本 :w 保存文件 :q 退出文件 按键 ESC 退出模式 Pasted image 20230815171750.png

Pasted image 20230815172031.png 我们将这个文件通过 git add 命令,放到我们我们前面 git init 生成的 .git 目录当中,这个目录对应着我们电脑当中的暂存区。 而 git-commit 命令则代表了我们的将暂存区的内容推送到本地的仓库。

Pasted image 20230815172438.png 这张图片很好的说明了 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。

Pasted image 20230815173825.png

如果我们想要查看修改的内容是什么,使用 git-diff,会详细展示我们的修改内容是什么,我的例子当中新增了一句话。

Pasted image 20230815174420.png

我们将其 add 之后查看其 status,其结果如下:显示需要 commit git commit -m "自己的修改部分"

Pasted image 20230815174619.png 最后我们将结果推送到本地仓库,其结果如下。 Pasted image 20230815174801.png

如果我们发现,目前的 git 的版本出现问题了需要进行回退,我们可以使用 git log 命令查看已经推送的版本,并且使用 git reset --hard HEAD^ ;来返回上一个版本,这时候 git status 的最新版本信息已经消失了。如果我们想要回到最新版本可以使用 git reset --hard gitlog中的版本编号 。通过这个方式可以自由的进行切换版本的更新和返回。

Pasted image 20230815175810.png

如果我们进行提交了修改,发现修改需要撤回,可以使用git checkout -- file 命令来进行。

可以直接在文件删除,但是也可以使用 git checkout -- file,发现文章回复原样。

Pasted image 20230815180505.png 下面对于常见情况的小结:

场景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 Pasted image 20230815205023.png 其中有*代表当前分支 接下来我们对 dev 分支的 test. Txt 文件进行修改之后提交。 Pasted image 20230815210633.png 接下来我们切换回我们原本分支,

git switch master

Pasted image 20230815210738.png 接下来对成果进行合并,并将 dev 分支删除,以及查看分支

 git merge dev
 git branch -d dev
 git branch

Pasted image 20230815210925.png 接下来,我们需要进入到 git 的处理分支部分,创建一个新的分支,并且修改一下文件内容,然后返回原本的分支也对文件进行修改,最后也进行提交。因为两个分支都对文件进行了修改,会提示你进行处理冲突。

Pasted image 20230815212424.png

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合并一下会出现问题。 Pasted image 20230815212555.png

git merge feature1

Pasted image 20230815212814.png 无法进行合并,需要我们手动进行修改,我们使用 cat test.txt

Pasted image 20230815212956.png

修改完成之后使用 git commit -m "conflict fixed"来进行合并冲突,使用 git log --graph --pretty=oneline --abbrev-commit 来观看相关的合并的可视化展开。

Pasted image 20230815213439.png 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

Pasted image 20230816160156.png Pasted image 20230816160507.png 下面是我们对于 bug 分支进行恢复,我们通过 git stash list 返回曾经的 stash 列表,使用 apply 和 drop 进行回复删除,使用 pop 命令进行回复。

git status
git stash list
git stash apply
git stash drop
git stash pop

Pasted image 20230816160700.png 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

Pasted image 20230816161545.png

Rebase 是指我们经常合并非常的乱,可以使用这个命令将 git 的提交历史变直,而非之前的乱七八糟的合并,使用 git rebase 可以解决这个问题。 正常情况下,我们多次合并修改代码 git 仓库的分支如下,非常的杂乱。 通过使用rebase可以将分支给变修整。

Pasted image 20230816161724.png

下面是 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 的相关博客

  1. 廖雪峰的 git 教程
  2. 青训营的 git 教程
  3. Chatgpt 推荐的 git 教程
  4. 菜鸟教程
  5. Git 的权威指南