Git撤销与重做提交操作指南
技术背景
在使用Git进行项目开发时,我们可能会因为各种原因需要撤销之前的提交,或者对提交内容进行修改。比如提交了错误的代码、误删了文件等。掌握如何撤销和重做提交操作,能帮助我们更灵活地管理代码版本,避免错误提交对项目造成影响。
实现步骤
撤销本地提交
- 保留更改:如果想要撤销最后一次提交,但保留所做的更改,可以使用
git reset --soft HEAD^
。示例如下:
1 2 3 4 5
| git log
commit 101: bad commit commit 100: good commit git reset --soft HEAD^
|
- 丢弃更改:若不关心所做的更改,希望直接回到上一次提交的状态,可以使用
git reset --hard HEAD^
。
撤销已公开提交
如果已经将提交推送到远程仓库,就不能简单地使用reset
,而是要使用git revert HEAD
创建一个新的提交来撤销当前HEAD
的更改。示例如下:
1 2
| git revert HEAD git commit -m 'restoring the file I removed by accident'
|
重做提交
若撤销提交后,想要重新提交更改,可以按以下步骤操作:
1 2 3 4
| [ edit files as necessary ] git add . git commit -c ORIG_HEAD
|
修改最后一次提交
可以通过替换索引中的文件并使用git commit --amend
来修改最后一次提交。示例如下:
1 2 3
| git rm --cached *.class git add *.java git commit --amend
|
核心代码
撤销本地提交
1 2 3 4
| git reset --soft HEAD^
git reset --hard HEAD^
|
撤销已公开提交
1 2
| git revert HEAD git commit -m '描述撤销操作的信息'
|
重做提交
1 2
| git add . git commit -c ORIG_HEAD
|
修改最后一次提交
1 2 3
| git rm --cached *.class git add *.java git commit --amend
|
最佳实践
- 本地开发:在本地开发时,如果发现提交有误,优先使用
git reset
来撤销提交。如果还想保留更改进行后续调整,使用--soft
选项;如果确定不需要这些更改,使用--hard
选项。 - 公共仓库:对于已经推送到公共仓库的提交,使用
git revert
来创建一个新的提交来撤销更改,避免使用--force
推送,以免影响其他开发者的工作。 - 添加忽略文件:将不必要的文件添加到
.gitignore
中,避免误提交。例如,将*.class
添加到.gitignore
中,防止提交不必要的类文件。
常见问题
误使用git reset --hard
丢失了提交怎么办?
可以使用git reflog
查看操作记录,找到丢失提交的SHA-1值,然后使用git checkout -b someNewBranchName shaYouDestroyed
恢复该提交。示例如下:
1 2 3
| git reflog
git checkout -b new_branch 2c52489
|
撤销提交后,如何重新提交更改?
撤销提交后,使用git add
将更改添加到暂存区,然后使用git commit
重新提交。可以使用git commit -c ORIG_HEAD
重用旧的提交消息。
已经推送的提交可以使用git reset
撤销吗?
不建议这样做。因为git reset
会修改本地的提交历史,而已经推送到远程仓库的提交历史被其他开发者拉取后,使用git reset
并强制推送会导致其他开发者的工作出现问题。应该使用git revert
来创建一个新的提交来撤销更改。