当前位置:   article > 正文

git reset后提交_当您需要撤消之前的本地提交时,只需执行git reset和push

git reset push

git reset后提交

我最近发表了一篇有关如何执行硬git reset的文章,但是在社交媒体上我反复问到的问题之一是,您对本地提交进行硬git reset之后将更改发布到远程GitHub或GitLab存储库? 当您执行git reset and push时,是否会发布整个提交历史记录,包括在重置点之后发生的提交,还是忽略了Git回滚的提交?

如何git重设并推动

在本地工作时,不清楚将git reset重置为先前的提交并将这些提交推送到远程存储库时会发生什么。 因此,为了演示git reset和push时到底发生了什么,我首先将创建一个名为git-reset-explained的空远程GitHub存储库。 它只包含一个readme.md文件,一个MIT许可证,一个.gitignore文件和一个提交。

远程GitHub存储库,用于git reset和push示例

用于git reset和push的远程存储库。

克隆git-reset解释的仓库

创建了远程GitHub存储库后,我将在本地克隆该存储库并开始在其中进行操作。

  1. /c/ git reset hard and push /
  2. $ git clone https://github.com/cameronmcnz/git-reset-explained.git
  3. Cloning into 'git-reset-explained'...
  4. $ cd git*
  5. /c/ git reset hard and push / git reset explained

创建本地提交历史

在克隆的仓库中,我将创建五个新文件,每次都添加一个新的提交。

  1. /c/ git reset hard and push / git reset explained
  2. $ touch alpha.html
  3. $ git add . & git commit -m "Local commit #1"
  4. $ touch beta.html
  5. $ git add . & git commit -m "Local commit #2"
  6. $ touch charlie.html
  7. $ git add . & git commit -m "Local commit #3"
  8. $ touch depeche.html
  9. $ git add . & git commit -m "Local commit #4"
  10. $ touch enid.html
  11. $ git add . & git commit -m "Local commit #5"

对reflog的调用显示了git commit命令发出时HEAD的历史记录:

  1. /c/ git reset hard and push / git reset explained
  2. $ git reflog
  3. 014df6a (HEAD -> master) HEAD@{0}: commit: Local commit #5
  4. 6237772 HEAD@{1}: commit: Local commit #4
  5. 593794d HEAD@{2}: commit: Local commit #3
  6. b1a6865 HEAD@{3}: commit: Local commit #2
  7. 8a3358e HEAD@{4}: commit: Local commit #1
  8. d072c0a (origin/master, origin/HEAD) HEAD@{5}: clone

git重置为上一次提交

现在,如果我要执行硬git reset并将HEAD移至第三个本地提交,则提交4和5应该消失,对吗? git reset应该从我的提交历史记录中删除那些提交,然后带我回到复位点,对吗? 让我们看看当我们发出命令git reset local commit时实际发生了什么。

  1. /c/ git reset hard and push / git reset explained
  2. $ git reset --hard 593794d
  3. HEAD is now at 593794d Local commit #3

现在,让我们看看reflog是什么样的:

  1. /c/ git reset hard and push / git reset explained
  2. $ git reflog
  3. 593794d (HEAD -> master) HEAD@{0} reset to 593794d
  4. 014df6a HEAD@{1}: commit: Local commit #5
  5. 6237772 HEAD@{2}: commit: Local commit #4
  6. 593794d (HEAD -> master) HEAD@{3}: commit: Local commit #3
  7. b1a6865 HEAD@{4}: commit: Local commit #2
  8. 8a3358e HEAD@{5}: commit: Local commit #1
  9. d072c0a (origin/master, origin/HEAD) HEAD@{6} clone

git reset硬推

从git reflog命令可以看到,提交014df6a和6237772仍然挂着。 当您git reset本地提交时,这些提交不会消失。

知道Git有存储所有内容的倾向,这并不是一个特别意外的结果。 真正的问题是,如果您将git reset重置为先前的提交并推送到远程存储库 ,将会发生什么? 跳过的两个本地提交git是否也会被推送,还是在本地保持隔离? 为了找出答案,我们只需将其推到远程原点即可:

  1. /c/ git reset hard and push / git reset explained
  2. $ git push origin
  3. Counting objects: 7, done.
  4. To github.com/cameronmcnz/git-reset-explained.git
  5. d072c0a..593794d master -> master

推送之后,当我们查看 GitHub上的提交历史记录时,我们注意到只有四个提交,即创建GitHub存储库的服务器端提交,以及我们发布的三个本地提交。 当git reset和push发生时,第四个和第五个本地提交没有被推送到服务器,实质上删除了它们存在的任何历史记录。

执行git reset并推送到GitHub上的远程

git的结果是硬重置和远程推送。

git reset vs恢复

那我们学到了什么? 好吧,当我们git reset到先前的提交并推送到远程存储库时,不会发布任何撤消提交的痕迹。 这与git revert形成了鲜明的对比,在git revert中,revert命令本身会创建一个新的提交,并且不会丢失过去的提交历史。 因此,如果您想使用Git 撤消先前的提交 ,则reset是使用而不是还原的正确Git命令。


想更多地了解Git?

您是Git的新手,并且有兴趣了解有关分布式版本控制的更多信息吗? 这是一些Git教程和Jenkins-Git集成示例,旨在帮助您快速学习Git,DVCS和其他流行的DevOps工具,例如Jenkins和Maven。

翻译自: https://www.theserverside.com/blog/Coffee-Talk-Java-News-Stories-and-Opinions/How-a-git-reset-and-push-to-remote-works-on-previous-local-commits

git reset后提交

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/764928
推荐阅读
相关标签
  

闽ICP备14008679号