文章目录
- 前言
- 一、情况复现
- 1.以前多人开发同一分支提交代码逻辑(下拉取后提交)
- 2.报错
- 二、解决方案
- 1. 撤销最近一次提交
- 2.提交代码
- 3.注意点:
- 常用的 git stash 命令:
前言
人员张三和人员李四在同一分支(dev)上开发
一、情况复现
1.以前多人开发同一分支提交代码逻辑(下拉取后提交)
git add .
git commit -m 'fix: 修改逻辑'
git pull origin dev
git push origin dev
2.报错
来自 https://xxxxxxxxxxxxx
branch dev -> FETCH_HEAD
提示:您有偏离的分支,需要指定如何调和它们。您可以在执行下一次
提示:pull 操作之前执行下面一条命令来抑制本消息:
提示: git config pull.rebase false # 合并
提示: git config pull.rebase true # 变基
提示: git config pull.ff only # 仅快进
提示:您可以将 “git config” 替换为 “git config --global” 以便为所有仓库设置
提示:缺省的配置项。您也可以在每次执行 pull 命令时添加 --rebase、–no-rebase,
提示:或者 --ff-only 参数覆盖缺省设置。
致命错误:需要指定如何调和偏离的分支。
二、解决方案
如果你已经git commit, 从第1步开始,如果没有从第2步开始
1. 撤销最近一次提交
git reset --mixed HEAD^
说明:
git reset:这是Git的一个命令,用于重置当前HEAD到指定的状态。
(1)–mixed:=这是git reset命令的一个选项,它会重置暂存区的状态,使其与HEAD相同,但是不会改变工作区。换句话说,–mixed选项会撤销已经暂存的改动,但是不会撤销已经做出的改动。=
(2)HEAD:===这是一个指向最近一次提交的引用。HEAD是当前分支上最近一次提交的引用,是一个修饰符,表示父提交,所以HEAD^表示当前分支上倒数第二次的提交。===
所以,git reset --mixed HEAD^命令的作用就是撤销最近的一次提交,并且将这些改动从暂存区移除,但是保留在工作区。
2.提交代码
dev 为分支名
git stash // 存储工作区的修改
git pull origin dev // 拉取最新代码
git stash apply // 应用最新存储的代码
git add .
git commit -m 'fix: 提交说明'
git push origin dev
3.注意点:
当你进行上述操作push代码又双叒叕报警告,显示和主分支不一样,可能是你的同事在你拉取后的几分钟里又提交了一次代码,因此你再执行一遍上述步骤即可。
常用的 git stash 命令:
git stash 将所有未提交的修改(包括暂存的和未暂存的)保存到一个新的stash中,然后重置你的工作目录到上次的提交状态
git stash save “message”:同git stash,并附加一条可选的消息。(更好让你理解这个stash为什么被创建)
git stash list:列出所有的stash。
git stash apply:应用最近的stash。
git stash apply stash@{n}:应用指定的stash。
git stash pop:应用最近的stash,并从stash列表中删除它。
git stash drop stash@{n}:删除指定的stash。