🔥Git秘籍集合:回退、合并、压缩提交、报错。。

突然有一个想法,大家把工作中遇到的git报错、或者说常用好用的操作,收集起来,前人采的坑后人避免,欢迎在评论区补充!

回退操作

bash 复制代码
git log
git revert xxxx

今晚不小心合并了别人的代码,想回退,步骤是

1、要找到你想要回退的提交的哈希值,可以使用 git log 命令来查看提交历史。

  1. 浏览提交历史,找到你想要回退的提交。每个提交前面都会有一个独一无二的哈希值(通常是一串40个字符的SHA-1哈希)。

  2. 复制想要回退的哈希值。

  3. git revert 将 <commit-hash> 替换为你复制的哈希值。

  4. 完成 git revert 后,Git 可能会要求你输入一个提交信息。输入备注说明,保存并退出编辑器,新的commit就会被创建。

可能会遇到的问题:

1、编辑器不会使用

文本编辑器中输入描述这次回退原因的文本,作一个commit的记录,这里是一个简单的步骤说明:

  1. 在编辑器中,找到不以 # 开头的行。以 # 开头的行是注释行,Git 会忽略它们。
  2. 在不以 # 开头的行上输入你的提交信息。例如:

合并远程分支的最新更改

解决了合并过程中的冲突

  1. 保存你的提交信息。保存方法取决于你使用的编辑器:

如果是 Vim,按 `Esc` 键退出编辑模式,然后输入 :wq(意味着"write and quit"即"保存并退出"),最后按 `Enter` 键

  • 如果是 Nano,按 Ctrl + O` ``保存更改,然后按`` `Enter,最后按`` `Ctrl + X``` 退出。
  1. 一旦保存并退出编辑器,Git 将会完成合并提交。

2、已经merge别的分支的代码,回退报错

vbnet 复制代码
git revert  8fxxxxxxxxxxxxxx
error: commit 8fxxxxxxxxxxxxxx is a merge but no -m option was given.
fatal: revert failed

这是因为回退到合并那个"分岔路"时,git不知道保留你本地的分支,还是别人的

所以你需要指定 -m 选项来告诉 Git 应该如何处理,在大多数情况下,-m 1 会保留当前分支的更改,而 -m 2 会保留被合并分支的更改。

输入下面命令即可

git revert -m 1 8fxxxxxxxxxxxxxx

合并多个commit再提交到远程

情景:我本地分支提交5个commit,现在要提交到远程了,我想提到远程的只有一个commit。

可以使用交互式变基(interactive rebase)来压缩(squash)这些提交。以下是具体步骤:

  1. 确定你要压缩的提交范围。使用 git log 查看提交历史。
  2. 启动交互式变基到那个提交: git rebase -i <commit-hash>将 替换为你在第一步中找到的哈希值。
  3. 在打开的编辑器中,会看到一个提交列表,每个提交前面都有一个命令(默认是 pick)。除了列表中的第一个提交外,将想要合并的 pick 改为 squash 或简写的 s
sql 复制代码
pick 01d1124 Your first commit message
squash 6340aaa Your second commit message
squash 7a143d5 Your third commit message
squash 3f6e2fe Your fourth commit message
squash 0d1e55d Your fifth commit message

这里第一个提交(01d1124)将保持不变,而后面的四个提交(6340aaa, 7a143d5, 3f6e2fe, 0d1e55d)将被合并到第一个提交中。最终,这五个提交将被压缩成一个新的提交,可以编辑一个新的提交信息,这个信息可以包含所有被合并提交的信息,或者可以写一个全新的提交信息来概括这些更改。

  1. 保存并关闭编辑器。如果你使用的是 Vim,可以按 Esc,然后输入 :wq,最后按 Enter。

完成这个操作后,你的本地分支上将只有一个新的提交,替代了之前的五个提交。当你将这个变更推送到远程仓库时,远程分支上也将只看到这一个新的合并提交。

合并别的分支的 commit

情景:现在在A分支,写了代码,部分commit了,部分没有,现在我想把改动迁移到新分支B

一、没有commit的部分迁移

css 复制代码
git stash
git checkout B
git stash pop

git stash 保存当前未提交的改动

git checkout B切换到主分支

git stash pop应用之前保存的改动到新分支B(本质上是入栈再出栈)

二、已经commit的部分迁移

如果你想将这些已经提交的改动也一起迁移到新分支B,你可以在新分支B上使用git cherry-pick命令来选择性摘取某个commit 来拼接到自己最前面。

perl 复制代码
git log
git cherry-pick <commit-hash> 其中`<commit-hash>`是你想要迁移的提交的哈希值。

三、已经commit的和未 commit的合并到B分支

方法一merge

如果你想将A分支上的所有改动(包括你已经提交的和未提交的)合并到B分支,你可以先把A分支add . commit(代指那两个操作),在B分支上使用git merge A命令。

Rebase**:如果你想你可以使用git rebase命令。

方法二resbase

将A分支上的提交历史重新应用到B分支上,git rebase A 这会将A分支上的提交历史放到B分支的顶部

merge跟rebase的区别

merge别人的就把别人的commit合成一个新的commit添加到最前头,

rebase相当于复制别人的commit

查看本地分支与远程分支之间的差异

  1. 首先,本地分支A获取远程分支 OA的最新信息:git fetch
  2. 然后,比较本地分支与远程分支之间的差异。
    1. 查看本地分支相对于远程分支的差异(即本地的提交比远程多,看多了什么):
      1. git log origin/OA..A
      2. git diff origin/OA..A
    2. 查看远程分支相对于本地分支的差异(即远程的commit更多时多,看看远程多了什么):
      1. git log A..origin/OA

如果你想看到具体代码的差异,使用git diff ,还可以git status来查看本地分支落后或者领先远程跟踪分支(git status也可以查看哪些文件、改动没有add进暂存区)

解决push时的报错

情况一:没跟踪

可能是本地分支A需要跟踪远程origin/A分支,不然push时,git 不知道push到哪里

css 复制代码
git fetch
git branch --set-upstream-to=origin/A A(这里的A需要换成你的分支名称

这样设置之后,你就可以使用以及使用git pushgit pull来推送和拉取改动。

备注:昨晚提交代码不小心合并了别人的代码,不会回滚,就学看一下,把我的学习成果记录下来跟大家分享,可能还有一些没提到的,后面的欢迎大家补充!

相关推荐
可缺不可滥4 分钟前
前端 性能优化 (图片与样式篇)
前端·性能优化
Bug从此不上门6 分钟前
Nuxt3之使用lighthouse性能测试及性能优化实操
前端·javascript·性能优化·vue·fetch·nuxt3
拼图20934 分钟前
Vue.js开发基础——数据绑定/响应式数据绑定
前端·javascript·vue.js
刘志辉39 分钟前
vue反向代理配置及宝塔配置
前端·javascript·vue.js
星叔1 小时前
ARXML汽车可扩展标记性语言规范讲解
java·前端·汽车
编程老船长1 小时前
第18章 从零开始:春节门联网页设计,用DIV+CSS打造传统与现代的完美融合
前端·css·html
sky.fly1 小时前
HTML5+css3(浮动,浮动的相关属性,float,解决浮动的塌陷问题,clear,overflow,给父亲盒子加高度,伪元素)
前端·css·html
Coisini_甜柚か2 小时前
打字机效果显示
前端·vue3·antv
郑小憨2 小时前
Node.js NPM以及REPL(交互式解释器) 使用介绍(基础介绍 二)
开发语言·前端·javascript·npm·node.js
嚣张农民2 小时前
在 WebSocket 连接中出现错误时,如何处理和捕获错误?
前端·javascript·面试