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

Git正确使用姿势

Git工作区域和流程

工作区域

  • 远程仓库: 就是我们托管在github或者其他代码托管平台上的仓库。
  • 本地仓库: 就是在我们本地通过git init命令初始化的新建的仓库。
  • 工作区: 就是我们写代码、编辑文件的地方。
  • 暂存区: 当工作区的内容写好了之后,就会通过add命令,将工作区的内容放到暂存区,等待commit命令提交到本地仓库中。

文件状态

  • 未跟踪的(untracked): 表示在工作区新建了某个文件,还没有add。
  • 已修改(modofied): 表示在工作区中修改了某个文件,还没有 add。
  • 已暂存(staged): 表示把已修改的文件已add到暂存区域。
  • 已提交(commit): 表示文件已经commit到本地仓库保存起来了。

Git常见命令

仓库初始化和克隆

bash 复制代码
# git仓库初始化
git init
​
# 从远程仓库中进行克隆代码到本地仓库
git clone [远程仓库的HTTP/SSH的URL]
​
# 查看当前git仓库的状态
git status

远程仓库管理

csharp 复制代码
# git remote 是用来管理远程仓库的命令
​
git remote      # 查看已配置的远程仓库
git remote -v   # 查看远程仓库的URL
git remote add <远程仓库名称> <远程仓库URL>   # 添加一个新的远程仓库
# e.g git remote add origin <远程仓库URL>,一般采用origin作为远程仓库的名字
git remote remove origin            # 删除名为origin的远程仓库
git remote rename origin newname    # 将origin的名字改为newname

从工作区提交代码到远程仓库

csharp 复制代码
# git add 将更改过的代码添加到暂存区
git add .   # 将工作区中所有更改添加到暂存区
git add index.html  # 添加更改的单个文件到暂存区
git add src/        # 添加该目录下的更改到暂存区
​
# git commit 将暂存区的代码提交大本地仓库
git commit -m "提交说明"    # 最常用的提交方式,一定要写提交说明,不然版本管理会非常痛苦
​
# git push 用于将本地的代码提交推送到远程仓库,将本地仓库中的提交上传到Git服务器上,使其成为远程仓库的一部分
git push <远程仓库名称> <本地分支名称>:<远程分支名称>
git push -f origin master   # 强制推送到origin的master分支,远程仓库origin的master分支上的之前的代码会被覆盖!非常危险的操作!
  • <远程仓库名称>:指定要推送到的远程仓库的名称,通常为"origin",这是Git默认的远程仓库名称。
  • <本地分支名称>:指定要推送的本地分支的名称,这是你当前所在的分支,例如"main"、"master"等。
  • <远程分支名称>:指定远程仓库中要接收提交的分支名称。

默认情况下,git push命令会将当前分支的代码推送到与之相对应的远程分支。例如,如果你当前在"main"分支上,并且与远程仓库"origin"关联,那么git push origin main命令将把"main"分支的提交推送到"origin"的"main"分支;如果远程分支不存在,则git push会自动创建一个新的远程分支。

从远程仓库中拉取代码

fetch

git fetch命令用于从远程仓库获取最新的代码提交和分支信息,但它不会将获取到的内容应用到你的工作目录或当前分支 ,也不会改变你本地仓库的历史记录。相当于是将远程仓库的最新信息下载到你的本地仓库,你可以通过git mergegit rebase将这些更新合并到你的当前分支。

以下是git fetch命令的用法:

sql 复制代码
git fetch <远程仓库名称>

在执行命令时,Git会连接到指定的远程仓库,并获取远程仓库中最新的分支和提交信息。它会将获取到的内容保存在本地仓库的"FETCH_HEAD"引用中。

merge&rebase

关于git merge和git rebase的区别在这里引用了另外一个博主的文章进行介绍。

文章原链接:blog.csdn.net/kevinxxw/ar...

merge

将 master 分支合并到 feature 分支最简单的办法就是用下面这些命令:

sql 复制代码
git checkout feature
git merge master

也可以把它们压缩在一行里。

sql 复制代码
git merge master feature

feature 分支中新的合并提交(merge commit)将两个分支的历史连在了一起。你会得到下面这样的分支结构:

rebase

作为 merge 的替代选择,你可以像下面这样将 feature 分支并入 master 分支:

git checkout feature
git rebase master

它会把整个 feature 分支移动到 master 分支的后面,有效地把所有 master 分支上新的提交并入过来。但是,rebase 为原分支上每一个提交创建一个新的提交,重写了项目历史,并且不会带来合并提交。

关于git rebase的黄金法则就是永远不要在公共分支上使用它。

rebase最大的好处是你的项目历史会非常整洁。首先,它不像 git merge 那样引入不必要的合并提交。其次,如上图所示,rebase 导致最后的项目历史呈现出完美的线性------你可以从项目终点到起点浏览而不需要任何的 fork。这让你更容易使用 git loggit bisectgitk 来查看项目历史。

不过,这种简单的提交历史会带来两个后果:安全性和可跟踪性。如果你违反了 rebase 黄金法则,重写项目历史可能会给你的协作工作流带来灾难性的影响。此外,rebase 不会有合并提交中附带的信息------你看不到 feature 分支中并入了上游的哪些更改。

交互式rebase

交互式的 rebase 允许你更改并入新分支的提交。这比自动的 rebase 更加强大,因为它提供了对分支上提交历史完整的控制。一般来说,这被用于将 feature 分支并入 master 分支之前,清理混乱的历史。

-i 传入 git rebase 选项来开始一个交互式的rebase过程:

css 复制代码
git checkout feature
git rebase -i master

它会打开一个文本编辑器,显示所有将被移动的提交:

bash 复制代码
pick 33d5b7a Message for commit #1
pick 9480b3d Message for commit #2
pick 5c67e61 Message for commit #3

这个列表定义了 rebase 将被执行后分支会是什么样的。更改 pick 命令或者重新排序,这个分支的历史就能如你所愿了。比如说,如果第二个提交修复了第一个提交中的小问题,你可以用 fixup 命令把它们合到一个提交中:

bash 复制代码
pick 33d5b7a Message for commit #1
fixup 9480b3d Message for commit #2
pick 5c67e61 Message for commit #3

保存后关闭文件,Git 会根据你的指令来执行 rebase,项目历史看上去会是这样:

忽略不重要的提交会让你的 feature 分支的历史更清晰易读。这是 git merge 做不到的。

分支管理

bash 复制代码
# git branch 命令用于查看、创建和管理分支

git branch 					# 查看本地所有分支
git branch -a				# 查看本地和远程的分支
git branch <新分支名称>		# 创建一个新分支
git branch -d <分支名称>	# 删除一个分支
git branch -D <分支名称> 	# 强制删除一个分支

# git checkout 用于在Git中切换分支、查看文件的不同版本或还原文件到之前的状态
关于git rebase的黄金法则就是永远不要在公共分支上使用它。
git checkout <分支名称>						 # 切换到其他分支上
											 # 新版本git中采用git switch <分支名称> 切换分支
git checkout <commit哈希值> <文件名>			# 查看文件的不同版本
git checkout <commit哈希值> -- <文件名>		# 还原文件到之前的状态

清空暂存区

perl 复制代码
git reset # 所有文件的变更撤销

如何进行团队协作

建立仓库

  • 在github上建立组织和仓库,看起来也酷酷的;
  • 在组织里面新建一个仓库。

添加SSH秘钥

最好是使用SSH,所以在仓库里面添加上各位团队成员的SSH秘钥

SSH秘钥的生成

在Windows上

  1. 打开Windows PowerShell或者Git Bash(如果你已经安装了Git)。
  2. 输入以下命令来生成SSH密钥对:
css 复制代码
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  • -t rsa: 指定生成RSA密钥对。
  • -b 4096: 指定密钥的位数。4096位提供更高的安全性,但生成时间可能稍长。
  • -C "your_email@example.com": 用你的邮箱地址替换这部分内容,这将作为你的密钥的注释。
  1. 系统会提示你选择密钥保存的位置,默认会保存在~/.ssh目录下,你可以按照提示选择保存位置或直接回车使用默认位置。
  2. 然后系统会让你输入一个密码来保护你的私钥。这是可选的,如果你不想设置密码,可以直接回车跳过。

在Ubuntu上

  1. 打开终端(Terminal)。
  2. 输入以下命令来生成SSH密钥对:
css 复制代码
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  • -t rsa: 指定生成RSA密钥对。
  • -b 4096: 指定密钥的位数。4096位提供更高的安全性,但生成时间可能稍长。
  • -C "your_email@example.com": 用你的邮箱地址替换这部分内容,这将作为你的密钥的注释。
  1. 系统会提示你选择密钥保存的位置,默认会保存在~/.ssh目录下,你可以按照提示选择保存位置或直接回车使用默认位置。
  2. 然后系统会让你输入一个密码来保护你的私钥。这是可选的,如果你不想设置密码,可以直接回车跳过。

完成上述步骤后,你会在指定的位置(默认为~/.ssh目录)找到生成的SSH密钥对。其中,私钥文件为id_rsa,公钥文件为id_rsa.pub。将公钥文件(id_rsa.pub)的内容复制并粘贴到需要使用该SSH密钥的服务器或Git托管服务中,以便进行身份验证。私钥文件请妥善保管,不要分享给他人,以保障账户的安全性。

Just do it!

剩下就是团队一起约定项目开发计划是什么呀?

变量命名要遵循什么规则啊?

大家一起加油吧!

相关推荐
研究是为了理解1 小时前
Git Bash 常用命令
git·elasticsearch·bash
DKPT2 小时前
Git 的基本概念和使用方式
git
Winston Wood5 小时前
一文了解git TAG
git·版本控制
喵喵先森5 小时前
Git 的基本概念和使用方式
git·源代码管理
xianwu5436 小时前
反向代理模块
linux·开发语言·网络·git
binishuaio9 小时前
Java 第11天 (git版本控制器基础用法)
java·开发语言·git
千慌百风定乾坤9 小时前
Go 语言入门指南:基础语法和常用特性解析(下) | 豆包MarsCode AI刷题
青训营笔记
FOFO9 小时前
青训营笔记 | HTML语义化的案例分析: 粗略地手绘分析juejin.cn首页 | 豆包MarsCode AI 刷题
青训营笔记
会发光的猪。10 小时前
如何在vscode中安装git详细新手教程
前端·ide·git·vscode
stewie611 小时前
在IDEA中使用Git
java·git