围炉网

一行代码,一篇日志,一个梦想,一个世界

git 修改、合并已提交记录

  • 与普通的修改需求不同,这次遇到的是想把已经推送到远端的记录一起进行修改。修改远端的记录其实是比较危险的!一定要慎重!

  • git log 查看提交记录,并找到要修改合并的提交记录的前一条记录

commit 0ba021c22397a0eb1f87ca65c29508746c9006f3 (HEAD -> main)             
Date:   Fri Mar 12 12:26:41 2020 +0800                                                                                                                                                          update format                                                                                                                                                                              commit e53471f44f681a50b9e1609392168e860460c086 (origin/main, origin/HEAD) 
Author: AdamsLee <adamslee@outlook.com> 
  update readme
Date:   Wed Mar 10 12:46:36 2020 +0800                                                                                                                                                          commit bb439221ef468c7783797c8859cb5c3f4b930a83            
Author: AdamsLee <adamslee@outlook.com> 
Date:   Wed Mar 10 12:31:57 2020 +0800 
fix computation bug                                  
  • git rebase -i bb439221ef468c7783797c8859cb5c3f4b930a83            (需要合并的前一条不需要合并的commit的哈希值)

  • 进入vi修改,比如将pick改成squash

pick e53471f update readme
squash 0ba021c update format
# Rebase bb43922..33c706a onto bb43922 (1 command)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
  • 保存退出进入commit message修改界面

  • 保存并退出。再次输入git log查看 commit 历史信息,你会发现这两个 commit 已经合并了。

  • 如果这个过程中有操作错误,可以使用 git rebase –abort来撤销修改,回到没有开始操作合并之前的状态。

  • 合并修改涉及到远端的仓库,谨慎使用git push -f 这条指令!该指令将本地仓库合并记录推送支远端仓库,如果没有-f的话,系统会提示你,当前记录不是最新的,无法提交,-f是force的意思,强制提交。但是必须确保合并修改前已经pull最新代码,并且期间没有人往远端推送。否则容易覆盖丢失别人的提交!

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

沪ICP备15009335号-2