【Git】详解git commit --amend用法以及使用遇到的问题
目录标题
在使用 Git 提交代码的时候,如果不想创建新的提交,而是将后续的改动合并到之前的提交中,可以使用一下命令:
实现在commit之前先将代码改动放在暂存区: git add .
使用–amend修改上次提交
git commit --amend --no-edit # 如果不修改提交信息,合并改动到上次提交
# 或
git commit --amend -m "新的提交信息" # 修改提交信息
由于修改历史提交,需要使用 -f 强制进行推送push:
git push -f origin <分支名> 或者 git push --force origin <分支名>
–amend是仅适用于未共享的提交
遇到的问题:
首先我在A分支执行了git commit --amend --no-edit提交操作,后续我又pull 拉去分支上的代码,就会出现冲突,解决完冲突后,仓库中就显示我有三次commit,这个时候可以执行先撤回最近的三次提交,然后再强制push推送,执行git reset HEAD~3 --soft ,
撤回三次,再进行提交,这样再看仓库中就只有一次commit了,包含全部改动,注意,这个时候就不要使用amend了,否则会导致他们的历史记录冲突,然后再git push --force-with-lease 强制推送;
git push --force-with-lease 和git push -f 区别
git push --force-with-lease 是一种比 git push -f 更安全的强制推送命令,它能防止意外覆盖远程分支的提交历史;
替代方案(如果想保留多个提交但在远程合并):
如果你想在本地保留多个提交记录,但在远程仓库中只显示一个提交,可以使用 git rebase -i 合并本地提交,然后再强制推送:
git rebase -i HEAD~n # 合并最近的 n 个提交
# 在弹出的编辑器中,将需要合并的提交前的 `pick` 改为 `squash` 或 `s`
git push -f origin <分支名>