我想知道如何删除提交。

经过 delete, ,我的意思是,就好像我没有进行该提交,当我将来进行推送时,我的更改将不会推送到远程分支。

我读了 git help,我认为我应该使用的命令是 git reset --hard HEAD. 。它是否正确?

有帮助吗?

解决方案

<强>小心: git reset --hard 将删除工作目录的变化。请务必藏匿要在运行此命令之前保持的修改。

假设你坐在那个承诺,那么这个命令将它怪人...

git reset --hard HEAD~1

HEAD~1意味着头之前提交。

或者,你可以看看git log的输出,发现提交的ID提交要备份到,然后做这样的:

git reset --hard <sha1-commit-id>

如果你已经推它,你将需要做力推摆脱它......

git push origin HEAD --force

然而后,如果其他人可能已经把它,那么你会过得更好开始一个新的分支。因为当他们拉,它只是把它合并到自己的工作,你会得到它推回再升。

如果你已经推,它可能是更好的使用git revert,创建一个“镜像”承诺,将撤消更改。然而,这两种提交将在日志中。


仅供参考 - 如果你想摆脱工作在进行中git reset --hard HEAD是很大的。它会重置你回到最近的提交,并删除在您的工作树和索引所有的变化。


最后,如果你需要找到一个承诺,你“已删除”,除非你有垃圾回收你的资料库是典型的git reflog存在。

其他提示

如果您还没有任何地方推提交,你可以使用 git rebase -i 删除该承诺。首先,找出多远回到那个承诺是(约)。然后执行:

git rebase -i HEAD~N

~N意味着变基最后N提交(N必须是一个数,例如HEAD~10)。然后,您可以编辑Git的呈现给你删除有问题的提交文件。在保存该文件,Git会再重写所有如下的提交,如果你删除了一个根本不存在。

在GIT中簿具有良好与图片和衍合部分实例

小心这一点,因为如果你改变的东西,你的的别处推,另一种方法将需要除非你打算做一个力推。

另一种可能性是我的个人喜爱的命令之一:

git rebase -i <commit>~1

这将在被提交之前要重击点开始在交互模式-i底垫。编辑器将启动自那以后上市的所有提交的。删除包含要抹杀和保存文件的提交行。变基会做的工作的其余部分,删除只提交和重放所有其他的回数。

我追加这个答案,因为我不明白为什么有人谁刚刚试图提交的工作将要使用删除,因为一些错误的所有的工作混帐!

如果你想保持你的工作,只是“撤消”那个commit命令(你推到回购之前抓到):

git reset --soft HEAD~1

除非你想破坏你的工作正在进行中自上次不要使用--hard 标志提交。

<强>卸下整个提交

git rebase -p --onto SHA^ SHA

显然,你想摆脱的引用来代替“SHA”。的“^”在该命令是立即数。

http://sethrobertson.github.io/GitFixUm/fixup.html

如果您没有发布修改,删除最新提交,你可以做

$ git reset --hard HEAD^

(注意,这也将删除所有未提交的更改;小心使用)。

如果您已经发布将要删除的提交,使用的 GIT中恢复

$ git revert HEAD
git reset --hard commitId

git push <origin> <branch> --force

PS:的commitid指要恢复到一个

假设我们要从存储库中删除提交 2 和 4。

commit 0 : b3d92c5
commit 1 : 2c6a45b
commit 2 : <any_hash>
commit 3 : 77b9b82
commit 4 : <any_hash>

笔记: 您需要拥有该存储库的管理员权限 因为你正在使用 --hard-f.

  • git checkout b3d92c5 检查最后一个可用的提交。
  • git checkout -b repair 创建一个新的分支来工作。
  • git cherry-pick 77b9b82 运行提交 3。
  • git cherry-pick 2c6a45b 运行提交 1。
  • git checkout master 结账师傅。
  • git reset --hard b3d92c5 将 master 重置为上次可用的提交。
  • git merge repair 将我们的新分支合并到 master 上。
  • git push -f origin master 将 master 推送到远程仓库。

<强>强行更改历史记录

假设你不只是要删除的最后一次提交,但你要删除的最后n的具体提交的提交,去:

如果你想看到在过去五年提交git rebase -i HEAD~<number of commits to go back>,所以git rebase -i HEAD~5

然后在文本编辑器改字pick旁边的每一个承诺,你想删除到drop。保存并退出编辑器。瞧!

<强>相加地更改历史记录

尝试git revert <commit hash>还原将创建一个提交该撤销指定提交。

如果你想修复你的最新承诺,您可以撤消提交和unstage文件在里面,这样做:

git reset HEAD~1

这将您的资料库恢复到其状态git的添加上演文件的命令之前。您的更改将在您的工作目录。 HEAD〜1指的是提交分支的当前尖端下方。

如果您想取消提交的n条提交,但保持代码的变化在你的工作目录:

git reset HEAD~N

如果你想摆脱你的最新的承诺,并且不希望保持代码的变化,你可以做一个“硬”复位。

git reset --hard HEAD~1

同样的,如果你要放弃最后N个承诺,并且不希望保持代码的更改:

git reset --hard HEAD~N
git rebase -i HEAD~2

下面“2”是要变基提交的数目。

'git rebase -i HEAD`

如果你想变基所有提交。

然后你就可以选择这些选项之一。

p, pick = use commit

r, reword = use commit, but edit the commit message

e, edit = use commit, but stop for amending

s, squash = use commit, but meld into previous commit

f, fixup = like "squash", but discard this commit's log message

x, exec = run command (the rest of the line) using shell

d, drop = remove commit

这些线可以被重新排序;他们从上到下执行。  如果删除此行犯下将会丢失。  但是,如果您删除一切,底垫将被中止。  需要注意的是空的提交被注释掉

您可以简单地删除提交使用选项“d”或删除具有行你的提交。

要删除在本地分支,使用

git reset --hard HEAD~1

要删除在远程分支,使用

git push origin HEAD --force

下面是另一种方式来做到这一点:

结帐要恢复分支,然后重置您的本地工作副本回承诺,你想在远程服务器上最新的一个(一切后它会再见)。要做到这一点,在SourceTree我右键点击了和选择“重置BRANCHNAME这一承诺”。我认为,命令行是:

git reset --hard COMMIT_ID

由于您刚刚从远程签出您的分支,你不会有任何本地更改不用担心丢失。但是,如果你这样做会失去他们。

然后导航到你的资料库的本地目录并运行此命令:

git -c diff.mnemonicprefix=false -c core.quotepath=false \
push -v -f --tags REPOSITORY_NAME BRANCHNAME:BRANCHNAME

这将在当前在本地资源库,但仅适用于一个分支后删除所有提交。

在错误:

git rebase -i --root'ed我的分支,无知想我可以改写第一个提交从主不同(在 GitHub上的Windows 的默认视图是比较掌握,躲在它的全部)。

我长大硅谷胡须而900+提交加载自己变成升华。没有改变退出,我收费,则我的电池进行刮胡子,因为所有900+单次的提交若无其事地重建基础 - 重置其提交时间到现在

测定击败GIT中并保留原始次,我删除这个本地资源库,并从远程重新克隆

现在它已经重新添加的最近不需要提交掌握我希望删除,所以进行像这样。

排出选项:

我不希望git revert - 它会造成额外的提交,给予GIT中上风

git reset --hard HEAD什么也没做,检查reflog后,最后只有HEAD是克隆 - Git的胜

要获得最新的SHA,我查了github.com远程仓库 - 未成年人赢

git reset --hard <SHA>工作过之后,我更新了另一个分支掌握和1 ... 2 ...噗!所述提交回来 - GIT中获得

检查回给主人,时间去尝试git rebase -i <SHA>,然后取出线......都无济于事,痛心地说。 “如果你删除这里行提交会丢失的”。啊......掩盖了新功能的巨魔中的的> 2.8.3释放说明

在解决方案:

git rebase -i <SHA>然后d, drop = remove commit

要验证的,我检出到另一个分支,瞧 - 没有隐藏致力于获取/从主拉

https://twitter.com/holman/status/706006896273063936

你的好日子。

上述

所有的命令恢复你的工作树和索引的状态,因为他们是在提交前,但不恢复仓库的状态。如果你看一下吧,“删除”的承诺实际上未被删除,它根本就不是当前分支的末端的一个。

我认为不存在任何手段来移除与的命令提交。的唯一方法是从日志中移除,然后引用日志,然后执行git prune --expire -now

来源: https://gist.github.com/sagarjethi/c07723b2f4fa74ad8bdf229166cf79d8

删除最后一次提交

例如你的最后一次提交

git push origin +aa61ab32^:master

现在您想删除此提交,然后可以通过以下简单方法来执行此操作

脚步

  1. 首先将分支重置为当前提交的父分支

  2. 用力将其推至遥控器。

git reset HEAD^ --hard

git push origin -f

对于特定提交,您想要重置如下

git reset bb676878^ --hard

git push origin -f

如果你只是搞砸了上次提交(错误信息,忘记添加一些变化),并希望它推到公共回购,为什么不使用前解决它:

git commit --amend -m "New message here"

如果您有新上演,他们将与之合并的改变最后提交的(你试图摆脱),将取代该提交。

当然,如果你修改提交你推后,你改写历史,所以如果你是一定要了解的含义。

您也可以通过代替“-M”的“--no编辑”选项,如果你希望使用以前提交的消息。

文档: http://git-scm.com/docs/git-commit.html

如果你想保留历史记录,显示了承诺和还原,你应该使用:

git revert GIT_COMMIT_HASH

进入的消息解释为什么你还原,然后:

git push  

当你发出git log你会看到无论是“错误”的承诺,并恢复日志信息。

如果您已经推,先找到你想在HEAD提交的($ GIT_COMMIT_HASH_HERE)的,然后运行以下命令:

git reset --hard $GIT_COMMIT_HASH_HERE
git push origin HEAD --force

然后,每个回购已被克隆的地方,运行:

git reset --hard origin/master

我通常会做什么时,我提交并推送(如果有人推他犯这个解决问题):

git reset --hard HEAD~1

git push -f origin

希望这有助于

在本地分支复位

git reset --hard HEAD~<Number of commit> So git reset --hard HEAD~3

强制推到原点

git push -f origin

到临时文件夹你的代码中采取备份。下面的命令将重置相同服务器。

git reset --hard HEAD
git clean -f
git pull

如果您想保留更改和删除最新提交

git reset --soft HEAD^
git pull

delete local commit

正如您在上图中看到的,我想删除恢复“测试更改 2”提交(SHA1 ID: 015b5220c50e3dfbb1063f23789d92ae1d3481a2(您可以使用以下方式获取 SHA1 ID gitk git bash 中的命令))。

为此,我可以使用(以下所有命令仅适用于本地。删除后需要推送):

  1. git reset --hard 515b5220c50e3dfbb1063f23789d92ae1d3481a2 //它支持您进行该提交(SHA1 ID 测试变更4 提交是 515b5220c50e3dfbb1063f23789d92ae1d3481a2)
  2. git reset --hard HEAD~1 // 它会在一次提交之前为您提供备份。
  3. git reset --hard HEAD^ // 从 git 中删除最后一次提交

删除后:

after delete commit

我已经推动。需要返回一些提交回remotly。 试过很多的变化, 但只有贾斯汀通过GIT中衬套为我工作罚款:

git reset --hard $GIT_COMMIT_HASH_HERE
git push origin HEAD --force

GIT中的复位 - 硬

git的推原点HEAD --force

如果在提交的一个或多个被标记,删除(多个)标签的第一,否则被标记的提交不会被删除。

// display git commit log    
$ git log --pretty=oneline --abbrev-commit

// show last two commit and open in your default editor
// then delete second commit line and save it
$ git rebase -i HEAD~2

参考:如何删除在GIT中的提交,本地和远程

假设你没有被推到远程存储库,则可以重新克隆库。这一直是我所选择的方法的几十倍。

使用GIT中恢复 https://git-scm.com/docs/git-revert 。它会恢复所有的代码,那么你可以做下一个commit.Then头将指向最后一次提交。退耕犯下从不删除,但它不会影响你最后一次提交。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top