如何永久撤消git remote的最近提交,但将其保存在本地?

时间:2019-05-22 05:05:33

标签: git git-push git-remote git-reset

我制作了一个git repo(只有一个master分支),其中有一个远程和一个本地。没有其他用户克隆了它,但是可以由几个用户克隆远程路径。

我的本​​地克隆在提交#17处,并且我将提交#12推送到远程。我已经意识到,不应该共享#6之后的每次提交,并且远程需求(暂时)仍保持在#6。

我不想丢失所有提交1-17和历史记录,但是为了重置远程,我的理解是我必须首先将local重置为#6并按-f that。我是否有可能将遥控器重置为#6,同时本地保持在17的前面,以便如果有人克隆遥控器,他们就看不到易受攻击的提交?

我的想法是,我需要先将我的本地克隆到另一个本地,以便第二个本地在执行重置以及后推-f之前保留所有17个提交和历史记录。这是一种应对这种情况的方式吗?

2 个答案:

答案 0 :(得分:2)

我建议从本地master创建一个新的功能分支,以记录#17之前的提交。然后,对您的本地master进行硬重置并强制执行以下操作:

# from local master
git branch feature
# now hard reset to commit #6
git reset --hard HEAD~10
# force push
git push --force origin master

现在,本地feature分支表示您的master分支的先前状态,直到提交#17,而本地master处于提交#6,并与远程master

答案 1 :(得分:0)

因此,您想推送另一个分支,但是在本地(专用)存储库上有来自远程的提交。

  1. 然后使用此远程状态创建新分支以获取此分支git branch <branch_name>的本地副本
  2. 签出您推送的本地分支,返回历史记录以指向您要重置或重新设置git reset --hard
  3. 的位置
  4. 推入带有强制标志git force --push
  

我不确定的部分是新的本地git克隆可能仍在其远程控制器中具有相同的远程控制器-从那里推送到远程控制器是否无效?

我不确定您要问的是什么,但是当您将某个内容推送到远程时,克隆后应该有一个远程遥控器-这是正常的。

顺便记住:

  

不要对存储库外部存在的提交进行基准化,否则人们可能会基于它们进行工作。   如果您遵循该准则,就可以了。如果您不这样做,那么人们会讨厌您,并且您会受到朋友和家人的嘲笑。