如何重新推送先前的提交?

时间:2019-02-13 08:23:29

标签: git git-extensions

我目前处于一些最新提交已覆盖旧提交内容的情况。

我正在使用工具git扩展,从GUI界面中,我可以签出特定的修订-提交。

所以我签出了修订版,并且可以在本地看到文件存在-但是似乎没有什么要提交的?我想这有道理吗?

如何重新推送先前的提交?

4 个答案:

答案 0 :(得分:0)

您是否尝试将提交放在首位?   git cherry-pick

答案 1 :(得分:0)

假设我们有一个场景,我们以前的提交日志就像

git status
commit-1 [ bad commit ]
commit-2 [ bad commit ]
commit-3 [ bad commit ]
commit-4 [ good commit ]
commit-5 [ good commit ]

现在我们可能想要两件事。

第一种情况

我们可能想要删除所有错误的git commit,并希望进入最后一个良好的commit阶段。就像关注

git status
commit-4 [ good commit ]
commit-5 [ good commit ]

我们可以通过休息前三个提交来做到这一点

git reset --hard HEAD~3 
# for n number of last commit reset 
git reset --hard HEAD~n

我必须提到,这是撤消工作的非常困难的方法。当您完全确定为什么要这样做时,请执行此操作。

第二种情况

您可能希望将commit-4放在其中的顶部

git status
commit-4 [ good commit ]
commit-1 [ bad commit ]
commit-2 [ bad commit ]
commit-3 [ bad commit ]
commit-4 [ good commit ]
commit-5 [ good commit ]

您可以按照以下步骤进行操作

git cherry-pick -n <commit-4 sha1>

这些将把commit-4放在那些错误的提交之上。

答案 2 :(得分:0)

我建议两种方法之一。

还原

如果您的新提交没有提供任何有用的信息。而且它只是取消了您在先前提交中所做的操作,使用git-revert。它将创建一个新的提交,该操作将不执行还原的提交所做的任何操作。

在git命令行中,您使用以下命令标识错误的提交     git日志 保留其ID(例如12345abcd)。然后还原该提交     git恢复12345abcd

樱桃采摘

如果您的新提交除了打破了旧提交之外还做得不错,那么您可以选择喜欢的旧提交。它将应用与上一次提交相同的代码更改。但是,它将成为新提交。这样可以使您的分支与较早的请求保持一致。

首先确定您要再次应用的提交     git日志 保留ID(例如fedc9876)     git cherry-pick fedc9876

如果您希望对Cherry Pick进行更多控制,请使用-n标志来防止立即提交     git cherry-pick -n fedc9876

您提到使用git工具。 git命令可能会帮助您找到如何为此目的使用它。

答案 3 :(得分:0)

所以我最终创建了一个新分支,并将文件移到了那里, 后来我遇到了类似的问题,我注意到本地分支和远程分支的命名方式不相同。

我执行了git push -f,因为我想与我们的主人重新建立基础, 但是本地分支名称与远程分支名称不同,这意味着已创建一个远程分支,并且该分支包含新的提交。

默认情况下,gitExtension似乎以大写字母开头创建本地分支-创建远程分支时并非总是如此。