git 撤销 commit,并推送到远程

本文详细介绍了git reset与git revert的区别,以及如何安全地回退本地和远程分支。git reset直接删除指定commit,可能导致合并时的问题,而git revert创建逆向commit来抵消原有提交,避免未来合并冲突。同时,通过实例讲解了git reset --soft和--hard的用法,强调了git reset --hard操作的风险,并推荐使用git revert来处理已推送至远程的更改。

reset与revert的区别

  1. git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
  2. 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。
  3. git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。

 

Git本地及远程分支回退

1. git本地版本回退

Git reset --hard commit_id(可用 git log –oneline 查看)

2. git远程版本回退

git push origin HEAD --force #远程提交回退

下面的命令也可以实现远程版本回退

git reset --hard HEAD~1
git push --force

3. git reverse和git reset的区别

  • git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
  • 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。
  • git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。

git reset + commit号

git reset命令后面是需要加2种参数的:
”–hard””–soft”

这条命令默认情况下是”–soft”。执行上述命令时,这该条commit号之 后(时间作为参考点)的所有commit的修改都会退回到git缓冲区中。

使用git status命令可以在缓冲区中看到这些修改。而如果加上”–hard”参数,则缓冲区中不会存储这些修改,git会直接丢弃这部分内容。

但需要注意的一 个问题是:由于这样的重置是直接在本地的修改,无法提交到远程服务器,如果直接丢弃的内容已经被推到远程服务器上了,则会造成本地和服务器无法同步的问题。

即git reset –hard只能针对本地操作,不能针对远程服务器进行同样操作。如果从本地删掉的内容没有推到服务器上,则不会有副作用;如果被推到服务器,则下次本地和 服务器进行同步时,这部分删掉的内容仍然会回来。

而上面注意中提到的问题则可以很好的被git revert 命令解决。

git revert + commit 号
该命令撤销对某个commit的提交,这一撤销动作会作为一个新的修改存储起来,这样,当你和服务器同步时,就不会产生什么副作用。

Git 中,撤销本地提交更新远程分支是一个常见的操作,通常涉及使用 `git reset` 命令来调整本地分支的状态,然后通过强制推送将更改同步到远程仓库。 ### 撤销本地提交 如果需要撤销最近的一次或多次提交,可以使用 `git reset` 命令。以下是几种常见的用法: - **撤销最近一次提交,保留工作目录中的更改**: ```bash git reset HEAD~1 ``` 这将把 HEAD 指针回退到上一个提交,但不会删除工作目录中的文件更改,适合在提交后发现有遗漏的文件需要修改时使用 [^1]。 - **撤销最近一次提交,删除工作目录中的更改**: ```bash git reset --hard HEAD~1 ``` 此命令会完全删除最近一次提交及其所有更改,适用于不需要保留该次提交内容的情况。 - **撤销多个连续的提交**: 如果需要撤销多个连续的提交,可以指定具体的提交哈希值或者使用 `HEAD~n` 表示从当前 HEAD 向前回退 n 个提交。 ```bash git reset --hard HEAD~3 ``` 这将撤销最近的三个提交,且删除这些提交中的所有更改 [^1]。 ### 推送远程仓库 一旦本地提交被撤销且分支状态已经调整,下一步是将这些更改推送远程仓库。由于本地分支的历史记录已经被重写,因此必须使用强制推送选项来更新远程分支。 - **强制推送更改到远程仓库**: ```bash git push origin <branch-name> --force ``` 这条命令会覆盖远程仓库中指定分支的历史记录,使其与本地分支保持一致。需要注意的是,这种操作会对团队协作产生影响,因为它会改变共享的历史记录,可能导致其他开发者的工作出现问题 [^3]。 ### 注意事项 - **沟通**:在执行强制推送之前,务必与其他团队成员进行充分沟通,确保他们知道即将发生的变更,以免造成数据丢失或其他问题 [^3]。 - **备份**:在进行任何可能引起数据丢失的操作之前,建议先创建一个备份分支,以便于在出现问题时可以快速恢复 [^3]。 通过以上步骤,可以有效地撤销本地 Git 提交更新远程分支,从而保持本地与远程仓库的一致性。不过,这类操作应当谨慎处理,尤其是在多人协作的环境中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值