If I do git checkout HEAD^
, I get this:
$ git checkout HEAD^
Note: checking out 'HEAD^'.
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...
$
Veteran git users are probably very familiar with this. But if I do git checkout HEAD
, nothing happens:
$ git checkout HEAD
$
I'd like to create the "detached HEAD" state for the commit at the head of my current branch. How do I do that?
git checkout --detach
on server, then git push server
on laptop, then git checkout master
on server to see changes made on laptop.
Since git 1.7.5 (April 2011), you can use the git checkout --detach
command.
(Since Git 2.23 (Q3 2019), you would use git switch --detach
)
See commit 326696
checkout: introduce --detach synonym for "git checkout foo^{commit}"
For example, one might use this when making a temporary merge to test that two topics work well together.
Commit 8ced1aa (git 1.7.11.3, July 2012) disallows --detach
on unborn branch, so this won't fail on a null HEAD
:
git checkout --orphan foo
git checkout --detach
git symbolic-ref HEAD
Only the upcoming git 1.8.4.2 or 1.8.5 (Q4 2013) clarifies the syntax. See commit 26776c9:
Separate this case into two syntactical forms, mimicking the way how the DESCRIPTION section shows this usage. Also update the text that explains the syntax to name the commit to detach HEAD at to clarify.
'git checkout' [--detach] <commit>::
Prepare to work on top of
That last point is precisely what you want to do for your current branch:
git checkout --detach
This command creates a detached head state from any given branch name (in this case, master):
git checkout master^0
Checking out commit hashes also automatically creates a detached head state, no need for ^0
:
git checkout 823112f444cb4aa70032feea6e8e5eb79d0e1ed0
And of course the shorter hashes as well:
git checkout 823112f
^0
bit when you're checking out by SHA, but I haven't tested that...
不定期副业成功案例分享
master^0
method.git checkout --detach
fails with the error messagefatal: You are on a branch yet to be born