常见git的使用
平时开发会出现各种各样的代码冲突问题,但是有些问题不太经常遇到,就会忘记命令,所以将常用的命令,做一个整理,后续也会持续更新,更好的去规避此类问题。
git 简介
git 工作区(workspace)、暂存区(index)、本地仓库(local repository)、远程仓库(remote repository),关系示意图如下:


git命令
scss
// 删除本地分支
git branch -d localBranchName
// 删除远程分支
git push origin --delete <branch-name>
变基(rebase):变基会将你的本地提交放在远程提交之后,使得历史更加线性整洁。
git pull --rebase origin feature-xxx
推送更新:解决了分歧之后,再次尝试推送你的本地更改到远程仓库。
git push origin feature-xxx
//本地从main新建了一个分支dev,远程有一个dev的分支 我需要把远程dev最新更改拉到本地dev如何实现?
git checkout -b dev //本地
git branch --set-upstream-to=origin/dev dev //将本地和远程分支进行关联
git fetch origin dev //从远程仓库获取最新的提交信息
git rebase origin/dev //将远程 dev 分支的更改合并到本地 dev 分支
ruby
git rebase的使用:
git checkout 当前本地分支
git checkout main /git pulll origin main
git checkout 当前本地分支
git rebase origin/main (将当前本地分支的提交 放到main分支的最新提交之后,保持线性提交)
git add . / git commit / git puh origin 远程分支
git cherry-pick 328aa9299fba4faaac1ad37ad2b6b8dc4773d8f4^..d42a440afebd2db46c72df393e62a36036bc5231 (从提交328aa9299fba4faaac1ad37ad2b6b8dc4773d8f4的^父提交)到d42a440afebd2db46c72df393e62a36036bc5231之间的所有提交 应用到当前分支上
git status -s 当前工作区和暂存区的状态
git push origin :feature-Add-pages-layout-20241105 删除远程分支
git push origin feat-struct-20241108:feature-Add-pages-layout-20241105 将本地分支feat-struct-20241108推送到远程并将其作为20241105分支
git rebase 和 git merge 的区别
采用git merge
1找到共同祖先:git merge 首先会找到两个分支的最新共同祖先。这是两个分支开始分叉的地方,即C2。
2合并更改:接下来,git merge 会尝试将 dev 分支上的更改应用到当前分支 master 上。也就是将 dev 分支上的更改与当前分支 master 上的更改合并在一起。
3解决冲突:如果两个分支对同一文件或同一行代码进行了不同的更改,git merge 会标记出这些冲突,并暂停合并过程。你需要手动编辑冲突的文件,解决冲突,然后使用 git add 命令标记冲突已解决,最后使用 git commit 命令完成合并。
4创建合并提交:一旦所有冲突都被解决,git merge 会创建一个新的合并提交,该提交包含了所有更改信息。这个新的合并提交会成为当前分支的一部分。
5更新分支指针:完成合并后,当前分支的指针会移动到新的合并提交上,目前 master 分支已经包含了dev 分支的所有更改。
采用git rebase
1切换到基准分支: git rebase 会自动执行 git switch master,然后再做其他事情。 否则,它会保留在当前分支上。
2保存提交: git rebase 会取出 dev 分支上所有还未应用到基准分支 master 上的提交,并将它们保存为临时文件。
3应用提交: git rebase 会按照当前分支上的提交顺序,逐个应用这些保存下来的提交。换句话说它会取出每个提交中的更改,并将这些更改应用到基准分支的当前状态上。
4解决冲突: 如果在应用某个提交时出现冲突,git rebase 会暂停并等待用户解决冲突。需要手动编辑文件以解决冲突,然后使用 git add 命令标记冲突已解决。解决所有冲突后,使用 git rebase --continue 命令继续应用剩余的提交。
5重写提交历史: git rebase 会创建一个新的提交序列,这个序列包含了当前分支上的所有更改,但已经基于基准分支的最新状态进行了重新应用。旧的提交会被丢弃,新的提交会替换它们。
6更新分支指针: 完成 rebase 后,当前分支的指针会移动到新的提交序列的最后一个提交上,表示该分支现在包含了基于基准分支的最新状态的更改。
如何选择git merge和git rebase
rebase 是 apply change,会更改 commit 的 commit id
注意:如果多人共用同一个分支,都 rebase develop 分支的话可能会出现问题。
建议:使用原子性提交,避免共用分支。
1使用merge:git merge有完整的提交记录,不管多少个分支都能追溯到相应版本,时间线准确,但分支图会较为复杂。如果你认为提交历史即是记录实际发生了什么很重要,那就用merge。
2使用rebase:git rebase合并时不会产生多余记录,分支图呈线性结构,整洁清晰。如果你认为提交历史即是项目过程中发生的事很重要 ,那就用rebase。

git 提交规范
代码提交前,需要思考和明确"什么样子的代码最容易复查"?
以便于识别出坏的代码和好的代码, 坏的代码及时止损;
原子性提交/MR,即越小规模的代码越容易复查。