What does git "updating currently checked out branch" warning mean?
When I do a git push, I see the following:
warning: updating the currently checked out branch; this may cause confusion,
as the index and working tree do not reflect changes that are now in HEAD.
I Googled for this message, and all I can find is a git mailing list discussion where the authors try to decide exactly how to make this message better to communicate to me what the real problem is.
How did I cause this, and how do I fix it?
This happens when you are pushing to a non-bare repo. A bare repo is one that consists solely of a .git
directory; a non-bare repo also includes a checkout. In general, you should not push to a non-bare repo; in fact, in future version of git, that will be forbidden. If you push to a non-bare repo, then the HEAD of that repo will be out of sync with the index and the working copy.
If you're creating a repo that people are going to want to push to, then you should create it using git init --bare
(and git init --bare --shared
if several user accounts need access to it), or git clone --bare
if you're creating it by cloning an existing repo.
In short, your remote repository is no longer a bare one, and you pushing on the remote checkout branch.
See "How to publish a Git repository":
A bare repository is one without a checked out working copy of the code. It only contains the git database.
As a general rule you should never push into a repository that contains changes in the working copy.
To ensure this doesn't happen, we're making the server repository a bare repository - it has no working copy
From here:
Note that the target of a "push" is normally a bare repository (ie, with no work tree of its own).
You can also push to a repository that has a checked-out working tree, but the working tree will not be updated by the push.
This may lead to unexpected results if the branch you push to is the currently checked-out branch.
If a detached work tree is defined (which can for instance correspond to a web server's DocumentRoot), you need to :
post-receive
hook on your remote repository (like the one described here), running " git checkout -f
" and git config receive.denycurrentbranch ignore
) Check, on your remote repository, the value of git config core.worktree
and git config core.bare
I made my repository bare by cloning a new, bare, repository from my messed up one, saving the messed-up one just in case, and replacing it with my cloned bare one.
I'm new to git, and when I set up the repsitory, I forgot to use the --bare option. Thanks for all your help!
I've since read the O'Reilly git book and now am a total git convert.
链接地址: http://www.djcxy.com/p/49018.html上一篇: 强制“git push”覆盖远程文件