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来创建一个新的提交来撤销更改。