From: Phil Hord Date: Sat, 16 Jul 2011 04:38:45 GMT Subject: Re: git push vs. slow connection times - local commit resolution is too late Message-ID: <4E2115D5.4010002@cisco.com> In-Reply-To: <4E1EEDAA.1000204@redhat.com> On 07/14/2011 09:22 AM, Eric Blake wrote: > I've been bitten several times by this bug now, so I'll report it in the > hopes that someone knows what to do to patch it. > > Scenario - I have a remote repository that takes on the order of 10 > seconds to connect to, for any operation like 'git push'. I know that > there is a lag, so I intentionally have two terminals open, both > visiting the same directory, one for interaction with the remote, and > the other for acting on the local repository, with the hope that I can > do useful work in the second terminal rather than idly waiting on the > lag in the first terminal. > > In the middle of rebasing a patch series, where I want to incrementally > push the patches that I have gotten through so far, I used the following > steps: > > On the remote-interaction terminal, I push the current state of my tree: > git push remote HEAD:master > > On the local-interaction terminal, I move on to the next patch: > git rebase --continue > > then, to my horror, I find out that the commit I'm working on locally > has already been pushed! Why? Because 'git push remote HEAD:master' > does not determine which commit 'HEAD' refers to until _after_ it has > established a connection to remote, but the stupid 10-second lag was > long enough that my actions in my second terminal have changed HEAD in > the meantime. > > I would really love it if 'git push' would resolve all local references > _prior_ to trying to connect to the remote server, rather than waiting > until after the connection. That way, my remote-interaction terminal > can truly be a type-it-and-forget-it terminal, where the push action I > requested reflects the state of the tree at the time I requested it, > rather than picking up changes made later in another terminal. I agree with your suggestion. But as a quick fix, can you do this? git push remote $(cat .git/HEAD):master Damned inconvenient, though. Phil