【问题标题】:Git Revert a few commits (including merges) then recommit them laterGit 还原一些提交(包括合并),然后稍后重新提交
【发布时间】:2021-06-14 20:42:33
【问题描述】:

我有一个登台服务器,我使用来自 git 服务器的git pull 更新代码。这里有一个可能相关也可能不相关的细节是,在某些时候它开始发生,每次我拉它时都会要求我合并。我还没有足够的时间弄清楚为什么。无论如何,如果我查看git log,每次拉动后都会合并。无论如何,不​​是真正的问题。我只需要暂时恢复 2 个以前的提交(有 2 个相应的合并)。我对如何使用 git revert 出现在 git 日志中然后提交的 2+2 = 4 哈希值非常有信心。

问题是我想在以后重新提交还原,因为我们稍后需要这些更改,但不是现在。我是否需要做一些特别的事情以免丢失我恢复的提交?

【问题讨论】:

    标签: git version-control git-revert


    【解决方案1】:

    revert 可能不是你想要的; revert 添加了一个撤消一组更改的新提交。 reset 更像是它,用于修改分支历史,但在做任何粗鲁的事情之前请阅读。

    我建议的第一件事是尝试使用pull -r 自动将您的本地更改重新定位到更新后的分支HEAD(即分支的远程副本)。

    您还可以使用rebase -i origin/mybranch 启动交互式rebase。 Rebase 是 git 最强大的功能,它允许你重写历史。这也有点危险,所以要小心。

    rebase上的教程:https://www.atlassian.com/git/tutorials/rewriting-history/git-rebase

    无论你对本地 git 目录做什么,reflog 都会让你看到你的 repo 之前的状态(提交)。当我搞砸了 rebase 或 reset 时不小心“丢失”了一次提交,它救了我一两次。

    【讨论】:

    • 我明白了,我意识到我不需要真正重写历史本身。事实上,我的官方源代码在远程服务器上。我不想改变它。我只需要暂时回退一些本地提交。现在我想我可以在本地恢复和提交,然后一旦我准备好,我就可以再次从服务器上拉下来,该服务器应该有我之前恢复的所有更改。你觉得这行得通吗?
    • 或者我应该做的是首先在本地恢复,这样我就有了我需要的东西。然后,一旦我想回到原始源代码,我可以更早地重置回相当多的提交,以便本地头 i 在远程头之前,然后再次拉取以恢复最新状态。这听起来怎么样?
    • @jeffery_the_wind 听起来可行,试试吧!
    • @jeffery_the_wind 当你不再认为使用 git 是一个循序渐进的过程,并开始将你的提交历史视为一系列独立的更改,你可以重写、润色、修剪和重新排列成你喜欢的任何结构,你就会成为我同事所说的“git Jedi”,你将不再被这些类型的问题所困扰。练习可视化你的回购历史(我使用tig OFTEN),并练习使用rebase。如果您曾经修改过提交,那么您已经开始了这段旅程。 :-)
    • 是的,谢谢你的好建议。通过这个问题,我了解了一些关于 git 的知识。我意识到最好的办法是回到开发周期的前端,在开发服务器中做正确的事情,并将更改推送到整个管道。 (而不是尝试在登台服务器上进行更改)我能够使用 revert 恢复我在开发服务器中所做的那些错误更改。然后,我在登台服务器中,将 git 历史记录重置为较早的少数提交并重新拉取。繁荣,瞧,现在我也不再被要求在每次拉动时合并。感谢您的帮助!
    猜你喜欢
    • 2011-12-19
    • 2015-07-22
    • 2021-07-28
    • 2020-10-04
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    • 2013-09-29
    • 2018-06-08
    相关资源
    最近更新 更多