当前位置:  开发笔记 > 开发工具 > 正文

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

如何解决《如何将HEAD移回以前的位置?(独立头)和撤消提交》经验,为你挑选了3个好方法。

在git中,我试图squash commit通过合并另一个分支然后HEAD通过以下方式重置到上一个位置:

git reset origin/master

但我需要走出这一步.如何将HEAD移回上一个位置?

我有23b6772提交的SHA1 frag(),我需要将其移动到.
我怎样才能回到这个提交?



1> CodeWizard..:

在回答之前,我们添加一些背景,解释这是什么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 
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 commit
git checkout -b 

git reflog

你总是可以使用它reflog.
git reflog将显示更新的任何更改,HEAD并检出所需的reflog条目将设置HEAD回此提交.

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

git reflog
git checkout HEAD@{...}

这将使您回到所需的提交

在此输入图像描述


git reset --hard

将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 stash
git reset --hard 0d1d7fc32
git 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 2.7起)
您也可以使用它git rebase --no-autostash.



git revert

"撤消"给定的提交或提交范围.
reset命令将"撤消"给定提交中所做的任何更改.
将提交具有撤消补丁的新提交,而原始提交也将保留在历史记录中.

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

此模式说明了哪个命令执行的操作.
正如你所看到的那样reset && checkout修改了HEAD.

在此输入图像描述


我对使用标题的内联代码标记有问题:)

2> Kay V..:

这是一种非常简单易记的方法.检查2个条件并完成1个命令.然后你又回到了正轨.

如果

你是'超级头'
(即类型git status;你看HEAD detached at )

现有的分支符合您的需求
(即类型git branch -v;您会看到一个分支名称,其中包含代表您要继续工作的相关提交消息)

然后

只需检查那个分支(即类型git checkout ;你看Switched to branch ).

成果

您现在可以像以前一样继续添加和提交您的工作; 将跟踪更改.

请注意,如果在分离HEAD时保存了工作,则在大多数情况下,工作将在上述过程中自动合并.如果您看到有关合并冲突的消息,请不要惊慌.有几个很棒的教程,包含修复冲突和完成合并的简单步骤.



3> amuliar..:

git reset 23b6772

查看您的位置是否正确:

git status

你会看到一些东西

在分支母版上您的分支落后“起源/母版” 17次提交,并且可以快速转发。

然后将HEAD修复为当前提交:

git push --force

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有