当前位置:   article > 正文

如何撤消Git中的最新本地提交?_bitbucket如何删除刚刚的提交记录

bitbucket如何删除刚刚的提交记录

我不小心将错误的文件提交给Git ,但是我还没有将提交推送到服务器。

如何撤消本地存储库中的那些提交?


#1楼

我想撤消我们共享存储库中的最新五次提交。 我查找了要回滚的修订版ID。 然后我输入以下内容。

  1. prompt> git reset --hard 5a7404742c85
  2. HEAD is now at 5a74047 Added one more page to catalogue
  3. prompt> git push origin master --force
  4. Total 0 (delta 0), reused 0 (delta 0)
  5. remote: bb/acl: neoneye is allowed. accepted payload.
  6. To git@bitbucket.org:thecompany/prometheus.git
  7. + 09a6480...5a74047 master -> master (forced update)
  8. prompt>

#2楼

使用git revert <commit-id>

要获取提交ID,只需使用git log


#3楼

我更喜欢使用git rebase -i来完成这项工作,因为会弹出一个不错的列表,我可以在其中选择要删除的提交。 它可能不像这里的其他答案那么直接,但是感觉不错。

选择要列出的提交数量,然后像这样调用(以列出最后三个)

git rebase -i HEAD~3

样品清单

  1. pick aa28ba7 Sanity check for RtmpSrv port
  2. pick c26c541 RtmpSrv version option
  3. pick 58d6909 Better URL decoding support

然后,Git将删除您删除的任何行的提交。


#4楼

如果您打算完全撤消本地提交,则对提交所做的任何更改,如果您对此不担心,只需执行以下命令即可。

git reset --hard HEAD^1

(此命令将忽略您的整个提交,并且您的更改将完全从本地工作树中丢失)。 如果要撤消提交,但是要在登台区域中进行更改(在提交之前,就像在git add之后一样),请执行以下命令。

git reset --soft HEAD^1

现在,您提交的文件进入暂存区。 假设如果您要升级文件,因为您需要编辑一些错误的内容,请执行以下命令

git reset HEAD

现在已提交的文件将从暂存区域进入未暂存区域。 现在文件已准备好进行编辑,因此无论您进行什么更改,都希望对其进行编辑并将其添加并进行新的/新的提交。

更多


#5楼

如何修复先前的本地提交

使用git-gui(或类似的工具)执行git commit --amend 。 在GUI中,您可以从提交中添加或删除单个文件。 您还可以修改提交消息。

如何撤消之前的本地提交

只需将分支重置到先前的位置即可(例如,使用gitkgit rebase )。 然后从保存的副本重新应用您的更改。 在本地存储库中进行垃圾回收之后,就像从未发生过不需要的提交一样。 要在单个命令中完成所有操作,请使用git reset HEAD~1

警告粗心地使用git reset是使工作副本进入混乱状态的好方法。 我建议Git新手尽可能避免这种情况。

如何撤消公开提交

执行反向樱桃挑git-revert )撤消更改。

如果您尚未将其他更改添加到分支中,则只需执行...

git revert --no-edit HEAD

然后将更新后的分支推送到共享存储库。

提交历史记录将分别显示两个提交


高级:更正公共存储库中的私有分支

这可能很危险-确保您具有要重新推送的分支的本地副本。

另请注意:如果其他人可能正在分支上工作,则您不想这样做。

git push --delete (branch_name) ## remove public version of branch

在本地清理您的分支,然后重新启动...

git push origin (branch_name)

在正常情况下,您可能不必担心您的私人分支提交历史记录很原始。 只需推送一个后续提交(请参见上面的“如何撤消公共提交”),然后再执行壁球合并即可隐藏历史记录。


#6楼

其它的办法:

签出您要还原的分支,然后将本地工作副本重置回您要成为远程服务器上最新提交的提交(此操作之后的所有操作都会再见)。 为此,我在SourceTree中右键单击,然后选择“将BRANCHNAME重置为此提交”。

然后导航到存储库的本地目录并运行以下命令:

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

这将删除本地存储库中当前提交之后的所有提交,但仅针对该分支。


#7楼

输入git log并找到最后的提交哈希码,然后输入:

git reset <the previous co>

#8楼

如果您想永久撤消它,并且已经克隆了一些存储库

提交ID可以通过

git log 

然后,您可以-

  1. git reset --hard <commit_id>
  2. git push origin <branch_name> -f

#9楼

SourceTree (适用于GitHub的GUI)上,您可以右键单击提交并执行“反向提交”。 这应该撤消您的更改。

在终端上:

您也可以使用:

git revert

要么:

  1. git reset --soft HEAD^ # Use --soft if you want to keep your changes.
  2. git reset --hard HEAD^ # Use --hard if you don't care about keeping your changes.

#10楼

就我而言,我意外地提交了一些我不想提交的文件。 所以我做了以下工作,它起作用了:

  1. git reset --soft HEAD^
  2. git rm --cached [files you do not need]
  3. git add [files you need]
  4. git commit -c ORIG_HEAD

使用gitk或git log --stat验证结果


#11楼

使用SourceTree (Git的图形工具)查看提交和树。 您可以通过右键单击直接将其手动重置。


#12楼

“将工作树重置为最后一次提交”

git reset --hard HEAD^ 

“从工作树中清除未知文件”

git clean    

参见-Git快速参考

注意:此命令将删除您以前的提交,因此请谨慎使用! git reset --hard更安全–


#13楼

首轮:

git reflog

它将显示您对存储库执行的所有可能操作,例如,提交,合并,拉取等。

然后做:

git reset --hard ActionIdFromRefLog

#14楼

使用reflog查找正确的状态

git reflog

刷新之前重置前重新记录

选择正确的引用日志(在我的情况下为f3cb6e2)并输入

git reset --hard f3cb6e2

之后,回购HEAD将重置为该HEADid 重置效果重置后记录

最后,reflog如下图所示

刷新后最后完成


#15楼

对于本地提交

git reset --soft HEAD~1

或者,如果您不记得确切的提交时间,则可以使用

git rm --cached <file>

对于推送的提交

从存储库历史记录中删除文件的正确方法是使用git filter-branch 。 那是,

git filter-branch --index-filter 'git rm --cached <file>' HEAD

但我建议您谨慎使用此命令。 在git-filter-branch(1)手册页中阅读更多内容。


#16楼

单个命令:

git reset --soft 'HEAD^' 

撤消上一次本地提交非常有用!


#17楼

如何撤消最后的Git提交?

为了将所有内容恢复到上一次提交之前的状态,我们需要重置为HEAD之前的提交。

  1. 如果您不想保留所做的更改,请执行以下操作:

     git reset --hard HEAD^ 
  2. 如果要保留更改:

     git reset --soft HEAD^ 

现在检查您的git日志。 它将显示我们的上一次提交已被删除。


#18楼

要重置为先前的版本,请永久删除所有未提交的更改:

git reset --hard HEAD~1

#19楼

如果您犯了垃圾但没有被推,

git reset --soft HEAD~1

HEAD〜1是head之前提交的简写。 或者,如果您想重置为哈希,则可以引用哈希的SHA-1--soft选项将删除提交,但会保留所有更改的文件“要提交的更改”,因为git status会将其保存。

如果您想摆脱工作树中被跟踪文件的任何更改,因为在头部之前的提交使用“ --hard ”代替。

要么

如果您已经推送并且有人拉了通常是我的情况,则不能使用git reset 。 不过,您可以执行git revert

git revert HEAD

这将创建一个新的提交,以撤消意外提交所引入的所有内容。


#20楼

更改最后一次提交

替换索引中的文件:

  1. git rm --cached *.class
  2. git add *.java

然后,如果它是一个私有分支,则修改提交:

git commit --amend

或者,如果它是一个共享分支,请重新提交:

git commit -m 'Replace .class files with .java files'


要更改以前的提交 ,请使用令人敬畏的交互式rebase 。)


ProTip™:将*.class添加到gitignore中,以阻止这种情况再次发生。


还原提交

如果您需要更改最后的提交,则修改提交是理想的解决方案,但是reset了更通用的解决方案。

您可以使用以下命令将Git重置为任何提交:

git reset @~N

其中NHEAD之前的提交次数, @~重置为前一个提交。

因此,您可以使用:

  1. git reset @~
  2. git add *.java
  3. git commit -m "Add .java files"

查看git help reset ,特别是--soft --mixed--hard上的部分,以更好地了解其功能。

刷新日志

如果您搞砸了,可以随时使用reflog查找丢弃的提交:

  1. $ git reset @~
  2. $ git reflog
  3. c4f708b HEAD@{0}: reset: moving to @~
  4. 2c52489 HEAD@{1}: commit: added some .class files
  5. $ git reset 2c52489
  6. ... and you're back where you started



#21楼

很简单,在命令行中运行以下命令:

git reset --soft HEAD~ 

#22楼

有很多方法可以做到这一点:

使用Git命令撤消上一次提交/上一次提交:

警告:如果您不知道自己在做什么,请不要使用--hard。 --hard太危险了 ,它可能会删除您的文件。

恢复Git中的提交的基本命令是:

$ git reset --hard <COMMIT -ID>

要么

$ git reset --hard HEAD~<n>

COMMIT-ID :提交的ID

n:是您要还原的最后一次提交的次数

您可以获取提交ID,如下所示:

  1. $ **git log --oneline**
  2. d81d3f1 function to subtract two numbers
  3. be20eb8 function to add two numbers
  4. bedgfgg function to mulitply two numbers

其中d81d3f1be20eb8是提交ID。

现在让我们看一些情况:

假设您想还原最后的提交'd81d3f1'。 这里有两个选择:

$ git reset --hard d81d3f1

要么

$ git reset --hard HEAD~1

假设您要还原提交“ be20eb8”:

$ git reset --hard be20eb8

有关更多详细信息,您也可以参考并尝试其他一些命令以将head重置为指定状态:

$ git reset --help

#23楼

撤消上一次提交:

git reset --soft HEAD^git reset --soft HEAD~

这将撤消上一次提交。

在这里--soft表示重置为暂存。

HEAD~HEAD^表示要在HEAD之前提交。


将最后的提交替换为新的提交:

git commit --amend -m "message"

它将用新的提交替换最后的提交。


#24楼

只需使用git使用以下命令将其重置:

git reset --soft HEAD~1

说明: git reset作用,基本上是resetreset为您要返回的任何提交,然后,如果将其与--soft key结合使用,它将返回,但会将更改保留在文件中,因此返回到刚刚添加文件的阶段, HEAD是分支的头,如果与~1组合(在这种情况下,您还使用HEAD^ ),它将仅返回您想要的一次提交。 ..

我在下图中为您创建了更详细的步骤,包括在实际情况下和提交代码时可能发生的所有步骤:

如何撤消Git中的最后一次提交?


#25楼

有两种方法可以“撤消”您的上一次提交,具体取决于您是否已将提交公开(推送到远程存储库):

如何撤消本地提交

假设我在本地提交了,但是现在我想删除该提交。

  1. git log
  2. commit 101: bad commit # Latest commit. This would be called 'HEAD'.
  3. commit 100: good commit # Second to last commit. This is the one we want.

要将所有内容恢复到上一次提交之前的状态,我们需要resetHEAD之前的提交:

  1. git reset --soft HEAD^ # Use --soft if you want to keep your changes
  2. git reset --hard HEAD^ # Use --hard if you don't care about keeping the changes you made

现在, git log将显示我们的上一次提交已被删除。

如何撤消公开提交

如果已经将提交公开,则需要创建一个新的提交,该提交将“还原”您在先前提交(当前HEAD)中所做的更改。

git revert HEAD

您的更改现在将恢复并准备提交:

  1. git commit -m 'restoring the file I removed by accident'
  2. git log
  3. commit 102: restoring the file I removed by accident
  4. commit 101: removing a file we don't need
  5. commit 100: adding a file that we need

有关更多信息,请查看Git基础知识-撤消事情


#26楼

如果您不知道提交的工作方式,则撤消提交会有些吓人。 但是,如果您理解的话,实际上非常容易。

假设您有这个,其中C是您的HEAD,(F)是您的文件状态。

  1. (F)
  2. A-B-C
  3. master

您想核对C,然后再也看不到它了 。 你做这个:

git reset --hard HEAD~1

结果是:

  1. (F)
  2. A-B
  3. master

现在B是HEAD。 因为使用了--hard ,所以文件在提交B时将重置为其状态。

嗯,但是假设提交C并不是一场灾难,只是有点困难。 您想要撤消提交,但是在进行更好的提交之前,请对更改进行一些编辑。 从这里再次开始,以C作为您的HEAD:

  1. (F)
  2. A-B-C
  3. master

您可以执行此操作,而无需使用--hard

git reset HEAD~1

在这种情况下,结果为:

  1. (F)
  2. A-B-C
  3. master

在这两种情况下,HEAD都只是指向最新提交的指针。 当您执行git reset HEAD~1 ,您告诉Git将HEAD指针移回一次提交。 但是(除非使用--hard否则)将文件保持原样。 因此,现在git status显示您已签入C的更改。您还没有丢失任何东西!

对于最轻松的接触,您甚至可以撤消提交,但保留文件和索引

git reset --soft HEAD~1

这不仅让您的文件独自一人,甚至让索引也独自一人。 当您执行git status ,您将看到与以前相同的文件在索引中。 实际上,在执行此命令后,您可以执行git commit然后重做刚才的相同提交。

还有一件事: 假设您像第一个示例一样破坏了一个提交但是毕竟发现您需要它 ? 运气不好吧?

不, 仍然有办法找回它。 输入git reflog ,您将看到移入其中的(部分)提交SHA-1哈希的列表。找到您破坏的提交,然后执行以下操作:

git checkout -b someNewBranchName shaYouDestroyed

您现在已经复活了该提交。 在Git中,提交实际上并没有被销毁约90天,因此您通常可以回去拯救不是故意要摆脱的一个。


#27楼

如果安装了Git Extras ,则可以运行git undo撤消最新的提交。 git undo 3将撤消最后三个提交。


#28楼

  1. git rm yourfiles/*.class
  2. git commit -a -m "deleted all class files in folder 'yourfiles'"

要么

git reset --hard HEAD~1

警告:以上命令将永久删除您要提交的对.java文件(和任何其他文件)的修改。

hard resetHEAD-1会将您的工作副本设置为错误提交之前的提交状态。


#29楼

撤消提交并重做

  1. $ git commit -m "Something terribly misguided" # (1)
  2. $ git reset HEAD~ # (2)
  3. << edit files as necessary >> # (3)
  4. $ git add ... # (4)
  5. $ git commit -c ORIG_HEAD # (5)
  1. 这是您要撤消的操作。
  2. 这不会对您的工作树(磁盘上文件的状态)产生任何影响,但是会撤消提交并保留您未提交的更改(因此它们将在git status显示为“未暂存为提交的更改”),因此您将需要在提交之前再次添加它们)。 如果你只是想更多的变化添加到先前的承诺,或修改提交信息1,你可以使用git reset --soft HEAD~代替,这就好比是git reset HEAD~ 2但保留现有的变化上演。
  3. 对工作树文件进行更正。
  4. git add要包含在新提交中的任何内容。
  5. 提交更改,重新使用旧的提交消息。 reset将旧头复制到.git/ORIG_HEAD ; 使用-c ORIG_HEAD commit -c ORIG_HEAD将打开一个编辑器,该编辑器最初包含旧提交的日志消息,并允许您对其进行编辑。 如果不需要编辑消息,则可以使用-C选项。

但是请注意,如果您向索引添加了任何新的更改,则使用commit --amend会将它们添加到以前的提交中。

如果代码已经推送到服务器,并且您有权覆盖历史记录(变基),则:

git push origin master --force

您还可以查看以下答案:

如何将HEAD移回先前的位置? (独立的头部)和撤消提交

上面的答案将向您显示git reflog ,用于查找您希望还原为的SHA-1。 找到要撤消的点后,即可使用上述命令序列。


1注意,但是,如果您在commit message了一个错误,则无需重置为较早的提交。 较简单的选项是git reset (取消对您自此以来所做的任何更改),然后git commit --amend ,这将打开您的默认提交消息编辑器,该编辑器预填充了最后一条提交消息。

2HEAD~HEAD~1相同。 另请参阅git中的HEAD是什么? 。 如果您要取消提交多个提交,这将很有帮助。


#30楼

添加/删除文件以所需的方式获取内容:

  1. git rm classdir
  2. git add sourcedir

然后修改提交:

git commit --amend

先前的错误提交将被编辑以反映新的索引状态-换句话说,就好像您从未犯过错误。

请注意,只有在尚未推送的情况下,才应该这样做。 如果已推送,则只需正常提交修复程序即可。

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

闽ICP备14008679号