Git常用命令总结

常见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,即越小规模的代码越容易复查。

相关推荐
小桥风满袖几秒前
Three.js-硬要自学系列7 (查看几何体顶点位置和索引、旋转,缩放,平移几何体)
前端·css·three.js
kim__jin3 分钟前
Vue3 使用项目内嵌iFrame
前端
独立开阀者_FwtCoder15 分钟前
# 一天 Star 破万的开源项目「GitHub 热点速览」
前端·javascript·面试
天天扭码26 分钟前
前端进阶 | 面试必考—— JavaScript手写定时器
前端·javascript·面试
梦雨生生43 分钟前
拖拉拽效果加点击事件
前端·javascript·css
前端Hardy1 小时前
第2课:变量与数据类型——JS的“记忆盒子”
前端·javascript
冴羽1 小时前
SvelteKit 最新中文文档教程(23)—— CLI 使用指南
前端·javascript·svelte
weixin-a153003083161 小时前
git常用命令
git
jstart千语1 小时前
【SpringBoot】HttpServletRequest获取使用及失效问题(包含@Async异步执行方案)
java·前端·spring boot·后端·spring
徐小夕1 小时前
花了2个月时间,写了一款3D可视化编辑器3D-Tony
前端·javascript·react.js