在咱们往常开发中,有时候提交到master主分支之后,不要已改的业务功用了或许有了更好的做法,此刻,咱们希望吊销提交的操作,让代码回到某个版别。

Git 中,咱们能够运用多种办法回退代码到指定版别,包含运用 reset 指令、运用 revert 指令、运用 checkout 指令等。下面分别介绍这些办法。

办法一: 运用 git reset 指令

指令

git reset

指令能够将当时分支的 HEAD 指针指向指定的提交,然后回退代码到指定版别。

该指令有三种形式:--soft--mixed--hard。它们的区别在于回退代码的程度不同。

  • --mixed (默认):将 HEAD 指针和暂存区都回退到指定提交,但不改动作业区的内容。
  • --soft 仅将 HEAD 指针回退到指定提交,不改动暂存区和作业区的内容。
  • --hard 将 HEAD 指针、暂存区和作业区都回退到指定提交,会丢掉最新的代码修正,慎用。

示例

# 检查提交前史
git log 
# 回退到指定提交(运用 --soft 形式)
git reset --soft <commit>
# 检查状况
git status
# 提交回退后的代码
git commit -m "回退到 <commit>"
# 推送到长途库房
git push origin <branch>

咱们首要运用 git log 指令检查提交前史,找到要回退到的提交的 SHA-1 值。

然后运用 git reset 指令回退代码到指定提交,

这里运用了 --soft 形式,这样暂存区和作业区的内容不会改动,仅仅 HEAD 指针指向了指定提交。

接着咱们运用 git status 指令检查当时状况,承认回退操作是否正确。

最后,咱们运用 git commit 指令提交回退后的代码,并运用 git push 指令将代码推送到长途库房。

办法二:运用 git revert 指令

指令

git revert 指令能够将指定提交的修正反向应用到当时分支上,相当于吊销指定提交的修正。

这种方式比运用 git reset 指令愈加安全,由于它不会改动提交前史,而是创建一个新的提交来吊销之前的修正。

示例

# 检查提交前史
git log
# 吊销指定提交
git revert <commit>
# 提交吊销操作
git commit -m "回退到版别 <commit>"
# 推送到长途库房
git push origin <branch>

咱们首要运用 git log 指令检查提交前史,找到要回退的提交的 SHA-1 值。

然后运用 git revert 指令吊销指定提交的修正,这样会创建一个新的提交来吊销之前的修正。

接着咱们运用 git commit 指令提交吊销操作,

并运用 git push 指令将代码推送到长途库房。

办法三:运用 git checkout 指令

指令

git checkout 指令能够将当时分支的 HEAD 指针指向指定的提交,并将作业区的内容替换成指定提交的内容。这种方式不改动提交前史,但会直接覆盖作业区的内容,慎用。

示例

# 检查提交前史
git log
# 切换到指定提交
git checkout <commit>
# 提交回退后的代码
git commit -m "回退到版别 <commit>"
# 切回到原来的分支
git checkout <branch>
# 推送到长途库房
git push origin <branch>

咱们首要运用 git log 指令检查提交前史,找到要回退的提交的 SHA-1 值。

然后运用 git checkout 指令切换到指定提交,这样作业区的内容就会被直接替换成指定提交的内容。

接着咱们运用 git commit 指令提交回退后的代码,并运用 git checkout 指令切回到原来的分支。

最后,咱们运用 git push 指令将代码推送到长途库房。

改之后git push上去长途库房的指令行 以及 报错的相关解决办法

当咱们改完代码后,想要将代码推送到长途库房时,能够运用以下指令:

# 推送当时分支到长途库房
git push origin <branch>

其间,<branch> 表明当时分支的称号,例如 master。这个指令会将本地分支的提交推送到长途库房,并将长途分支更新为与本地分支共同。

假如在推送代码时呈现过错,能够根据过错提示进行相应的解决办法。

常见的过错及其解决办法如下:

  • error: failed to push some refs to 'git@github.com:<username>/<repository>.git':这个过错通常是由于本地分支和长途分支的提交前史不共同导致的。解决办法是先履行 git pull 指令将长途分支的代码拉取到本地,然后再履行 git push 指令推送代码。

  • error: src refspec <branch> does not match any:这个过错通常是由于本地分支不存在或许拼写过错导致的。解决办法是先履行 git branch 指令检查本地分支列表,承认分支名是否正确,假如不存在则需求先创建分支。

  • error: failed to push some refs to 'git@github.com:<username>/<repository>.git':这个过错通常是由于权限缺乏导致的。解决办法是承认当时用户是否有权限推送代码到长途库房,假如没有则需求联系管理员进行授权。

总结

总之,回退代码和推送代码都是 Git 中非常常见的操作,把握这些操作能够帮助咱们愈加高效地进行开发和协作。

希望能有所帮助。

最好的学习是贡献和输出。

本文正在参加「金石计划」