1. commit之后发现还有一个小改动需要添加(例如变量名错误,忘记格式化) 以下操作只限在本地!
解决方法一:
git reset --soft HEAD^
git commit -m '新的提交信息'
解决方法二:
git commit -m '提交信息'
git rebase -i # 合并提交信息
# 把需要合并的commit的pick改成s
# 修改总体的commit message (使用第一个commit message 把其他的注释掉)
解决方法三:(更简单)
git add . # 或者你可以添加指定的文件
git commit --amend --no-edit
2. commit之后发现commit信息写错了
情况一:针对刚刚提交的commit
git commit --amend
情况二:不是刚刚提交的commit
git rebase -i HEAD^^ #举例是倒数第二次提交 倒数第五次提交就是HEAD~5
# 操作:将要操作的commit前的 pick 改成 edit
# 操作:修改写错的commit
git add .
git commit --amend
git rebase --continue #继续rebase 有冲突需要解决冲突 如果rebase过程中不想rebase了 可以使用git rebase --abort
3. commit提交错分支了
# 切换到正确的分支
git checkout name-of-the-correct-branch
# 抓取 提交错的那个分支上最新的那个 commit
git cherry-pick name-of-the-incorrect-branch
# 然后删掉 master 上的那个 commit
git checkout name-of-the-incorrect-branch
git reset HEAD~ --hard
4. 发现某一次commit有bug
git log # 查看历史提交 A---B(有bug)----C----D---E
git rebase -i HEAD~5
# 操作:将需要修改的commit所在的行前面的 pick 修改为edit或者e
# 操作:修改bug代码
git commit --amend #修改commit信息
git rebase --continue #继续rebase 有冲突需要解决冲突 如果rebase过程中不想rebase了 可以使用git rebase --abort
git push [仓库名] [分支] -f #rebase结束后,会修改所有rebase的commitID,如果想要push到远程仓库可能需要强制push
5. commit的代码不想要了
情况一:刚刚提交的
git reset --hard HEAD^
情况二:不是刚刚提交的
方法一:
git rebase -i HEAD^^ #举例是倒数第二次提交 倒数第五次提交就是HEAD~5
# 操作:将要删除的commit那行全部删掉
方法二:
git rebase --onto
# rebase 的起点是⾃动判定的:选取当前 commit 和⽬标 commit 在历史 上的交叉点作为起点 起点不包含在 rebase 序列
6. 代码已经 push 上去了才发现写错?
情况一:自己的分支
通过上述方法修改后 可以直接git push origin branch1 -f
情况二:合并到了main分支
用revert增加一个新的提交
git revert HEAD^ #这里举例用最新的commit
# 修改完后把新的 commit 再 push 上去,这个 commit 的内容就被撤销了。
# 这样改动只是被「反转」了,并没有在历史中消失掉,历史中会存在两条 commit:⼀个原始 commit ,⼀个对它的反转 commit
7. ⼿头有⼀件临时⼯作要做, 需要把⼯作⽬录暂时清理⼲净
git stash # 在当前分支操作 将所有改动存起来
# 操作:切换到其他分支做其他工作
git stash pop # 处理完其他工作 回到之前的分支 把存储的东⻄取出来
参考资料: