丢弃Git中的本地提交
由于一些错误的选择,我的本地Git存储库目前比源代码提前了五次提交,并且状态不好。我想摆脱所有这些承诺,重新开始 显然,删除我的工作目录并重新克隆就可以了,但再次从GitHub下载所有内容似乎有些过火,并没有很好地利用我的时间 也许我需要的是丢弃Git中的本地提交,git,Git,由于一些错误的选择,我的本地Git存储库目前比源代码提前了五次提交,并且状态不好。我想摆脱所有这些承诺,重新开始 显然,删除我的工作目录并重新克隆就可以了,但再次从GitHub下载所有内容似乎有些过火,并没有很好地利用我的时间 也许我需要的是git revert,但我不想在源代码之前提交10次(甚至6次),即使它确实将代码本身恢复到正确的状态。我只想假装过去的半小时从未发生过 有一个简单的命令可以做到这一点吗?这似乎是一个显而易见的用例,但我没有找到任何例子 请注意,此问题是关于提交的,而不是
git revert
,但我不想在源代码之前提交10次(甚至6次),即使它确实将代码本身恢复到正确的状态。我只想假装过去的半小时从未发生过
有一个简单的命令可以做到这一点吗?这似乎是一个显而易见的用例,但我没有找到任何例子
请注意,此问题是关于提交的,而不是关于:
- 未跟踪的文件
- 未老化的变化
- 已暂存但未提交的更改
git reset --hard <the sha1 hash>
git重置——硬
让你的头回到你想去的地方。使用gitk查看您要进行的提交。您也可以在gitk中执行重置操作。如果您的多余提交仅对您可见,则只需执行以下操作即可
git重置——硬原点/
返回原点所在的位置。这会将存储库的状态重置为上一次提交,并将放弃所有本地更改
执行
git revert
会进行新的提交以删除旧的提交,从而保持每个人的历史记录正常。只需删除本地主分支,然后像这样重新创建它:
git branch -D master
git checkout origin/master -b master
如果您正在使用Atlassian SourceTree应用程序,则可以使用关联菜单中的重置选项
关于您的分支尝试:
git reset --hard origin/<branch_name>
git重置——硬原点/
使用“
git log
”或“git status
”验证反转(到无本地提交的状态)。要查看/获取提交的SHA-1 id,也要返回
gitk --all
回滚到该提交
git reset --hard sha1_id
!!注意。提交之后所做的所有提交都将被删除(以及您对项目的所有修改)。因此,首先最好将项目克隆到另一个分支或复制到另一个目录。对于未被推送的本地提交,您也可以使用
git rebase-i
删除或压缩提交。我曾遇到过一种情况,我想删除未被推送的提交,但该提交在另一个提交之前。为此,我使用了以下命令
git rebase-i HEAD~2
->它将重新设置最后两次提交的基础
我使用了“drop”作为要删除的提交签名。删除最近的提交:
git重置——硬头~1
删除最近的提交,但不破坏已完成的工作:
git reset--soft HEAD~1
git reset--hard@{u}
*删除当前分支上的所有本地更改,包括提交。我很惊讶还没有人发布这篇文章,因为考虑到您不必查找要恢复到或使用分支的提交内容
*也就是说,在@{upstream}
-通常是origin/
,但并不总是git reset-硬
如果您在本地副本上犯了一些错误,并且希望确保这些错误不会被错误地推送到远程分支,那么这将非常有用
可以通过查看分支上最后一次提交的git仪表板的webVersion来获得SHA代码
这样,就可以与分支上的最后一次提交同步
您可以在成功完成硬重置后执行git pull,以确认syn没有新内容,即您可以看到消息
您的分支机构是最新的,Origin/
删除未跟踪的文件(未提交的本地更改)
永久删除所有本地提交并获取最新的远程提交
git reset --hard origin/<branch_name>
git重置——硬原点/
对于那些对Visual Studio解决方案感兴趣的人,以下是练习:
团队资源管理器
窗口中,连接到目标回购李>
分支
,右键单击感兴趣的分支并选择查看历史
李>
历史记录
窗口中的提交,然后选择重置->删除更改(--hard)
origin/XXX
”早5次提交
您可以发布:
git reset --hard HEAD~5
它应该删除最后5次提交。在回答之前,让我们添加一些背景,解释一下这是什么
头。因为下面的一些选项会导致头部分离
首先什么是头?
HEAD
只是对当前分支上当前提交(最新)的引用。
在任何给定时间只能有一个头。(不包括git工作树
)
HEAD
的内容存储在.git/HEAD
中,它包含当前提交的40字节SHA-1
分离头
如果您不在最新提交上-意味着头部
指向历史记录中的先前提交,则称为分离头部
在命令行上,它看起来像-SHA-1,而不是分支名称,因为头
没有指向当前分支的尖端
有关如何从分离的头部恢复的几个选项:
这将使你回到你想要的承诺
“移动”你的头回到想要的位置
#这将破坏任何本地修改。
#如果你有未完成的工作要做,就不要做。
git重置—硬0d1d7fc32
git reset --hard origin/<branch_name>
git reset --hard HEAD~5
git checkout <commit_id>
git checkout -b <new branch> <commit_id>
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 <commit-id>
# create a new branch forked to the given commit
git checkout -b <branch name>
git reflog
git checkout HEAD@{...}
git reset --hard origin/master
za$ git reflog
... snip ...
cf42fa2... HEAD@{0}: commit: fixed misc bugs
~
~
cf42fa2... HEAD@{84}: commit: fixed params for .....
73b9363... HEAD@{85}: commit: Don't symlink to themes on deployment.
547cc1b... HEAD@{86}: commit: Deploy to effectif.com web server.
1dc3298... HEAD@{87}: commit: Updated the theme.
18c3f51... HEAD@{88}: commit: Verify with Google webmaster tools.
26fbb9c... HEAD@{89}: checkout: moving to effectif
za$ git reset --mixed cf42fa2
za$ git reset -h
-q, --quiet be quiet, only report errors
--mixed reset HEAD and index
--soft reset only HEAD
--hard reset HEAD, index and working tree
--merge reset HEAD, index and working tree
--keep reset HEAD but keep local changes
--recurse-submodules[=<reset>]
control recursive updating of submodules
-p, --patch select hunks interactively
-N, --intent-to-add
git reset --soft HEAD~1
git reset HEAD <name-of-file/files*>