如果想从某个分支切换到特定的提交:
git checkout 760ac7e
假设当前在提交 b9ac70b
,如何返回到上一次所知道的头部提交 b9ac70b
而不需要知道其 SHA1 值?
如果想从某个分支切换到特定的提交:
git checkout 760ac7e
假设当前在提交 b9ac70b
,如何返回到上一次所知道的头部提交 b9ac70b
而不需要知道其 SHA1 值?
如果你记得之前检出的分支是哪个(例如master
),那么你可以简单地执行以下操作:
git checkout master
要退出“detached HEAD”状态,通常来说:使用git checkout <branchname>
即可。
如果你记不得上一个分支的名字,可以尝试:
git checkout -
这也尝试着检出你上次检出的分支。
使用 git reflog
查找以前检出的提交哈希值。
一个快捷命令以跳转到您最后检出的分支(不确定在分离的 HEAD 和中间提交下是否正常工作)是 git checkout -
git checkout master
# or
git checkout -
那么你可能会丢失你的提交记录!!相反,你可能希望这样做:
# you are currently in detached HEAD state
git checkout -b commits-from-detached-head
然后将commits-from-detached-head
合并到你想要的任何分支中,这样你就不会丢失提交记录。
我遇到了一个特殊情况,当时我检出了代码的一个早期版本,那个版本中我的文件目录结构不同:
git checkout 1.87.1
warning: unable to unlink web/sites/default/default.settings.php: Permission denied
... other warnings ...
Note: checking out '1.87.1'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again.
Example:
git checkout -b <new-branch-name>
HEAD is now at 50a7153d7... Merge branch 'hotfix/1.87.1'
git checkout master
无效:$ git checkout master
error: The following untracked working tree files would be overwritten by checkout:
web/sites/default/default.settings.php
... other files ...
git checkout master --force
(或git checkout master -f
)起了作用:
git checkout master -f
Previous HEAD position was 50a7153d7... Merge branch 'hotfix/1.87.1'
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
git checkout <branch*>
(git checkout master
是特殊情况)。
*我们(无意中)分离了一个提交(使用git checkout <commit_hash>
)。test
的分支,试图创建一个名为test/my-experimental-feature
的分支。这让git感到困惑,因为它认为我正在引用一个已经存在的分支。我将其更改为test--my-experimental-feature
,然后就可以正常工作了。git switch master
命令用于切换到 "master" 分支。
git switch -
命令用于切换回上一个分支。
由于GitHub不再将master作为新存储库的默认分支。
git checkout master
对我无效。
有效的方法是:
git checkout main
git checkout main
这是在我的情况下唯一有效的方法。其他人都是骗子。
git checkout -
是一个非常方便的功能!它可以让你回到上一次所在的分支。 - dimpiaxgit checkout -b new_branch_name
,那么您会失去在此期间所做的提交吗? - jocassidgit gc
时,它们将永远被删除。只要它们仍然存在,您可以使用git reflog
查看它们。 - eckesgit switch
这个命令。 - mfaani