博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
丢弃Git中的本地提交
阅读量:3579 次
发布时间:2019-05-20

本文共 3488 字,大约阅读时间需要 11 分钟。

由于一些糟糕的挑选,我的本地存储库目前在原点之前提交了五个提交,并且状态不佳。 我想摆脱所有这些提交并重新开始。

显然,删除我的工作目录并重新克隆会这样做,但是再次从GitHub下载所有内容似乎有些过分,而且不能很好地利用我的时间。

也许git revert是我需要的东西,但是我不希望在原点(甚至六个)之前结束10次提交,即使它确实让代码本身恢复到正确的状态。 我只想假装最后半小时从未发生过。

是否有一个简单的命令可以做到这一点? 这似乎是一个明显的用例,但我没有找到它的任何例子。


请注意,这个问题具体是关于提交而不是关于:

  • 未跟踪的文件
  • 未分期的变化
  • 上演但未提交的变更

#1楼

如果您使用的是Atlassian SourceTree应用程序,则可以使用上下文菜单中的reset选项。

在此输入图像描述


#2楼

在你的分支尝试:

git reset --hard origin/

因此,使用“ git log ”或“ git status ”验证反转(到状态,没有本地提交)。


#3楼

要查看/获取您想要返回的提交的SHA-1 ID

gitk --all

回滚到该提交

git reset --hard sha1_id

!注意。 在该提交之后进行的所有提交都将被删除(以及对项目的所有修改)。 因此,首先要将项目克隆到另一个分支或复制到另一个目录。


#4楼

对于未被推送的本地提交,您还可以使用git rebase -i来删除或压缩提交。


#5楼

我有一种情况,我想删除未被推送的提交,但提交是在另一个提交之前。 为此,我使用了以下命令

git rebase -i HEAD~2 - >它会重新定义最后两次提交

我使用'drop'作为我想删除的提交签名。


#6楼

删除最近的提交:

git reset --hard HEAD~1

删除最近的提交,而不会破坏您已完成的工作:

git reset --soft HEAD~1


#7楼

尝试:

git reset --hard 

将头重置到你想要的任何地方。 使用gitk查看您想要的提交。 你也可以在gitk中重置。


#8楼

如果您的超额提交仅对您可见,您可以执行git reset --hard origin/<branch_name>以返回原点所在的位置。 这会将存储库的状态重置为先前的提交,并将丢弃所有本地更改。

做一个git revert做了一个新的提交,以一种让每个人的历史保持清醒的方式删除旧的提交。


#9楼

只需删除您的本地主分支并重新创建它,如下所示:

git branch -D mastergit checkout origin/master -b master

#10楼

git reset --hard @{u} *删除当前分支上的所有本地更改,包括提交。 我很惊讶没有人发布这个,但考虑到你不必查找承诺恢复或使用分支机构。

*也就是说,重置为@{upstream} common- origin/<branchname>的当前分支,但并非总是如此


#11楼

git reset --hard 

如果您在本地副本上犯了一些错误,以确保不会错误地将其推送到远程分支,这将派上用场。

可以通过查看git仪表板的webVersion获取分支上的最后一次提交来获取SHA代码。

这样,您就可以与分支上的最后一次提交同步。

成功完成硬重置后,您可以执行git pull ,以确认没有新的同步,即您可以看到该消息。

您的分支是最新的Origin/<Branch Name>


#12楼

删除未跟踪的文件(未提交的本地更改)

git clean -df

永久删除所有本地提交并获取最新的远程提交

git reset --hard origin/

#13楼

对于那些对Visual Studio解决方案感兴趣的人,这里是演练:

  1. 在“ Team Explorer窗口中,连接到目标仓库。
  2. 然后从Branches ,右键单击感兴趣的分支,然后选择View history
  3. 右键单击“ History窗口中的提交,然后选择“ Reset -> Delete changes (--hard)

这将丢弃您的本地提交并将您的仓库状态重置为所选提交。 即你撤回回购后的更改将会丢失。


#14楼

如果你的分支在5次提交之前超过' origin/XXX '。

您可以发出:

git reset --hard HEAD~5

它应该删除最后5个提交。


#15楼

在回答之前,让我们添加一些背景,解释这个HEAD是什么。 因为下面的一些选项会导致头部分离

First of all what is HEAD?

HEAD只是对当前分支上当前提交(最新)的引用。

在任何给定时间只能有一个HEAD 。 (不包括git worktree

HEAD的内容存储在.git/HEAD ,它包含当前提交的40字节SHA-1。


detached HEAD

如果您没有进行最新提交 - 这意味着HEAD指向历史记录中的先前提交,则称为已detached HEAD

在命令行上,它看起来像这样 - SHA-1而不是分支名称,因为HEAD没有指向当前分支的尖端

关于如何从分离的HEAD中恢复的几个选项:


git checkout 
git checkout -b
git checkout HEAD~X // x is the number of commits t go back

这将检查指向所需提交的新分支。

此命令将签出到给定的提交。
此时,您可以创建一个分支并从此开始工作。

# Checkout a given commit. # Doing so will result in a `detached HEAD` which mean that the `HEAD`# is not pointing to the latest so you will need to checkout branch# in order to be able to update the code.git checkout 
# create a new branch forked to the given commitgit checkout -b

您也可以随时使用reflog

git reflog将显示更新HEAD任何更改,并且检出所需的reflog条目会将HEAD设置回此提交。

每次修改HEAD时, reflog都会有一个新条目

git refloggit checkout HEAD@{...}

这将使您回到所需的提交


将HEAD“移动”回所需的提交。

# This will destroy any local modifications.# Don't do it if you have uncommitted work you want to keep.git reset --hard 0d1d7fc32# Alternatively, if there's work to keep:git stashgit reset --hard 0d1d7fc32git stash pop# This saves the modifications, then reapplies that patch after resetting.# You could get merge conflicts if you've modified things which were# changed since the commit you reset to.
  • 注意:( )
    你也可以使用git rebase --no-autostash

“撤消”给定的提交或提交范围。

reset命令将“撤消”给定提交中所做的任何更改。
将提交具有撤消补丁的新提交,同时原始提交也将保留在历史记录中。

# add new commit with the undo of the original one.# the 
can be any commit(s) or commit rangegit revert

此架构说明了哪个命令执行的操作。

如你所见, reset && checkout修改HEAD

转载地址:http://qtogj.baihongyu.com/

你可能感兴趣的文章
Java垃圾回收机制(GC算法简述)
查看>>
面试中的数据库基本知识(数据库概述)
查看>>
GC之垃圾收集器
查看>>
进程与线程(操作系统+java)
查看>>
Java线程池
查看>>
HashMap
查看>>
算法笔记1————求一维数组的主元素
查看>>
算法笔记2————单向循环链表实现约瑟夫环
查看>>
算法笔记3-----------Java大数类(这也能叫算法?菜鸡的我只能如此)
查看>>
算法笔记4------获取出现次数大于1的字串(JAVA)
查看>>
数据结构笔记-----对递归(recursion)的学习
查看>>
初识HADOOP---大数据分析技术笔记1
查看>>
HDFS的概念----大数据分析学习笔记2
查看>>
HDFS读写流程---大数据分析学习笔记3
查看>>
关于YARN---大数据分析学习笔记4
查看>>
HDFS之checkpoint机制---大数据分析学习笔记5
查看>>
Shuffle流程————大数据分析学习笔记6
查看>>
数据结构笔记----图解插入直接排序算法及其改进形式
查看>>
初识Hive---大数据分析学习笔记7
查看>>
数据结构算法笔记---图解快排(QuickSort)
查看>>