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

相关推荐
前端小巷子14 分钟前
Vue3 响应式革命
前端·vue.js·面试
一狐九29 分钟前
Flutter如何通过GlobalKey调用组件内的方法
前端·flutter
wyzqhhhh39 分钟前
前端如何处理首屏优化问题
前端
杨荧1 小时前
基于Python的反诈知识科普平台 Python+Django+Vue.js
大数据·前端·vue.js·python·数据分析
22jimmy2 小时前
JavaWeb(二)CSS
java·开发语言·前端·css·入门·基础
m0_738120725 小时前
CTFshow系列——命令执行web38-40
前端·windows·安全·web安全
是小狐狸呀6 小时前
elementUI-表单-下拉框数据选中后,视图不更新
前端·javascript·elementui
Kiri霧8 小时前
Git入门
git
Nejosi_念旧9 小时前
git报错解决:ssh: connect to host github.com port 22: Connection refused
git·ssh·github
四岁半儿9 小时前
常用css
前端·css