Skip to content

Awesome-Git

4287字约14分钟

Git

2024-11-01

Awesome-Git

Git是一个广泛使用的版本控制系统,可以让开发者轻松地在不同分支上工作并将其合并到主分支上。除此之外,Git还有很多其他的功能和工具,例如代码审查和历史记录查看等。Git已经成为现代软件开发中不可或缺的工具,无论是个人项目还是大型团队,都可以从中受益。

Awesome-Git

Git是一个广泛使用的版本控制系统,它是由Linus Torvalds在2005年开发的。Git的目的是为了帮助开发者更有效地管理和协作开发代码。Git的优势在于它是分布式的,意味着每个开发者都有一个完整的代码库,并且可以在本地进行版本控制和修改。这样可以避免出现单点故障,使得团队能够更加高效地协作。Git还具有强大的分支和合并功能,可以让开发者轻松地在不同分支上工作并将其合并到主分支上。除此之外,Git还有很多其他的功能和工具,例如代码审查和历史记录查看等。Git已经成为现代软件开发中不可或缺的工具,无论是个人项目还是大型团队,都可以从中受益。

历史回顾

在以前的开发版本中,我们是在单版本的情况下进行的开发。每次只需要在上一个发布中,从发布分支中拉取最新的代码即可。但是在多版本并行的情况下,原有方式已经不能够满足开发的需求。

如何进行新的版本管理

分支管理

当有两个版本需要同时进行开发时,并且有a,b, c都分别需要对这两个版本进行开发时,并且版本中含有多个功能时。

基本流程

git checkout release-X

git pull

git checkout -b 版本号

git push origin/版本号

git checkout -b 功能名称

git push origin/功能名称

git checkout -b 功能名称-A(user)

编写功能

git push origin/功能名称-A(user)

在代码仓库提交pr指定给该开发相同功能的开发者

处理冲突,pr合并
切换分支到上一个版本的最新发布代码

确保代码为最新

创建版本号

推送版本号到远程分支

切换分支到对应功能名称上

推送本分支到远程

切换分支到功能a-自己的分支上

推送自己的分支到远程

合并代码/code review

第7条和绿色部分操作可以省略,遇到冲突只能按照 谁遇到谁解决 的方式进行处理

至此一个功能已经开发完毕,本地测试无误后,需要对功能进行测试。

进行测试

我们会有一个测试分支(test),这个分支将会用于测试环境的服务,此分支可用于多个功能的测试。操作如下

到代码仓库中,选择合并请求 (pr),添加对应的通知对象,选择功能分支合并到测试分支,通过即可,流水线那边配置了代码合并后自动运行流水线,降低打包切换分支的负担。

版本上线

到达版本日期时,到这里版本上线需要合并的分支 填入需要合并的分支,后端工程师会按照填表的内容进行合并到对应版本。随后进行新版本发布

hotfix

对于热修,需要从上次发版的节点,拉取对应的代码,修改后,使用pr的方式合并。当下一次发版时,总是默认需要用旧的版本合并到新的版本

对于hotifx的测试应该合并到test分支。

代码提交到了错误的分支如何处理(这个部分可能需要演示下)

暂未推送到远程分支

git log 找到对应commit id

git reset commit id --hard

git add 对应代码

git commit -m "提交信息"

git push

git stash

git checkout 对应代码的分支

git stash pop

git commit -m "提交信息"

已经推送到远程分支

git log 找到对应commit id

git reset commit id --hard

git stash

git pull

移除相关代码

Git add

Git commit

git checkout 对应的分支

Git stash pop

将不需要代码移除

Git add

Git commit

危险操作/禁止的操作

Git reset --hard xx && git push --force

如何没法避免进行以上操作,请务必结伴编程

后续讨论

是否需要引入 tag ?

git fetch-rebase flow流程

日常命令

查看当前分支状态,不确定就每次操作后就用此命令看看

git status

本地有改动,又需要从远程拉取最新

git stash

git fetch -pP

git rebase

Bash
# 冲突解决
git rebase --abort 会回到rebase操作之前的状态,之前的提交的不会丢弃;
git rebase --skip 则会将引起冲突的commits丢弃掉;
git rebase --continue 用于修复冲突,如果已经解决了冲突,git add 后再执行此命令,继续rebase

git stash pop

提交代码到本地待提交仓库

git add .

Bash
# 提交指定文件到本地仓库,可以空格多个
git add {filename1}

对本地待提交仓库的代码做备注

git commit -m "remark"

将本地待提交仓库代码推到远程仓库

git push

举例:从远程已有的master分支拉一个自己开发分支

切换到master分支

git checkout master

将本地master分支从远程拉取最新

git stash

git fetch -p

git rebase origin/master

git stash pop

新建本地分支feature/wiki,并且从master分支复制,创建成功后会自动切换到新分支feature/wiki

git checkout -b feature/wiki

将本地新分支推送到远程,使远程也有此分支

git push origin feature/wiki

本地分支与远程分支绑定

git branch --set-upstream-to origin/feature/wiki

查看本地分支与远程分支关联情况

git branch -vv

小技巧

查看本地分支

git branch

Bash
# 查看创建的远程分支
git branch -r

本地有修改,对比改动了哪些

git diff

本地的修改在add到本地待提交仓库之前,回滚所有修改,所有改动会丢失

git checkout .

Bash
# 回滚指定修改
git checkout