* Replacing a Remote Branch
@ 2010-07-23 20:14 Eric James Michael Ritz
2010-07-23 20:48 ` Thomas Rast
0 siblings, 1 reply; 7+ messages in thread
From: Eric James Michael Ritz @ 2010-07-23 20:14 UTC (permalink / raw)
To: git
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hello everyone. I have a question about pushing branches that I hope
a more experienced user could help me with.
Commonly I run into this situation:
1. I have pushed a topic branch out to a repo where other developers
on my team push their work until its ready to be merged.
2. I realized I need to perform some ‘destructive’ action like
‘rebase -i’ or amend the last commit to fix a typo in the message.
3. Then I want to push the changed branch as a replacement.
Currently I deal with this by running
$ git push origin :foo && git push origin foo
to replace `foo`. But is there a shorter way to do this? I thought
that writing something like
$ git push origin +foo:foo
may have the intended effect, but I still get a rejection due to a
non-fast-forward, so I am likely misunderstanding the purpose of `+`.
If there is any short-cut for this, I would greatly appreciate it.
And if not, writing a simple script is not a huge hassle :)
- --
Eric James Michael Ritz
Cyber Sprocket Labs
(843) 225-3830
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iQEcBAEBAgAGBQJMSfg7AAoJEEHUZXw5hMWshwAIALOnsArQIWoxXNmOVNvi3ptd
oXpUXbfX2ZgMnhOQAYmJXYjkqc/fKFh+MultDP1PRgQwPdPCEUfK/n5TEJXB66Jf
nsgnGWIHk7nULuKJmCb9BrDd+xVI4tvbhI3gZYXrypoWdrfUat9rlUL52+eiAXp7
CG/FQrSoFRydREGUuAi1UNtTPt9UG2MT65dEx/S8wqRn8phpJHZI94mKOVZ58lI1
oQDfx+Ox6p2RJG/HRrX7/jWOiGzMk3Ix/cToAaltBWWp7MgvDq31pjrN0TZJfUu+
+vcgafAqseXDDuStlEGd8O5WT+uRYjn9/K3YHf55MKsMvKVzNxgS8IHQGzC+Yk4=
=/0uY
-----END PGP SIGNATURE-----
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: Replacing a Remote Branch 2010-07-23 20:14 Replacing a Remote Branch Eric James Michael Ritz @ 2010-07-23 20:48 ` Thomas Rast 2010-07-23 20:52 ` Eric James Michael Ritz 2010-07-24 1:17 ` bill lam 0 siblings, 2 replies; 7+ messages in thread From: Thomas Rast @ 2010-07-23 20:48 UTC (permalink / raw) To: Eric; +Cc: git Eric James Michael Ritz wrote: > 2. I realized I need to perform some ‘destructive’ action like > ‘rebase -i’ or amend the last commit to fix a typo in the message. > > 3. Then I want to push the changed branch as a replacement. [...] > $ git push origin :foo && git push origin foo > > to replace `foo`. But is there a shorter way to do this? I thought > that writing something like > > $ git push origin +foo:foo > > may have the intended effect, but I still get a rejection due to a > non-fast-forward, so I am likely misunderstanding the purpose of `+`. Since + overrides the non-ff check, this means that the remote side has receive.denyNonFastForwards (see man git-config) enabled (or a hook to the same effect). Deleting and pushing the new branch merely defeats this refusal because it is no longer a branch *update*. You should probably check why and by who receive.denyNonFastForwards was set. Git itself sets it if you use 'git init --shared', so that may be one reason. Note that non-ff updates are generally a bad thing for everyone who has work based on the affected branch. -- Thomas Rast trast@{inf,student}.ethz.ch ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Replacing a Remote Branch 2010-07-23 20:48 ` Thomas Rast @ 2010-07-23 20:52 ` Eric James Michael Ritz 2010-07-24 1:17 ` bill lam 1 sibling, 0 replies; 7+ messages in thread From: Eric James Michael Ritz @ 2010-07-23 20:52 UTC (permalink / raw) To: Thomas Rast; +Cc: git -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 07/23/2010 04:48 PM, Thomas Rast wrote: > Eric James Michael Ritz wrote: >> 2. I realized I need to perform some ‘destructive’ action like >> ‘rebase -i’ or amend the last commit to fix a typo in the message. >> >> 3. Then I want to push the changed branch as a replacement. > [...] >> $ git push origin :foo && git push origin foo >> >> to replace `foo`. But is there a shorter way to do this? I thought >> that writing something like >> >> $ git push origin +foo:foo >> >> may have the intended effect, but I still get a rejection due to a >> non-fast-forward, so I am likely misunderstanding the purpose of `+`. > > Since + overrides the non-ff check, this means that the remote side > has receive.denyNonFastForwards (see man git-config) enabled (or a > hook to the same effect). Deleting and pushing the new branch merely > defeats this refusal because it is no longer a branch *update*. > > You should probably check why and by who receive.denyNonFastForwards > was set. Git itself sets it if you use 'git init --shared', so that > may be one reason. That’s the reason then, `--shared` was used. > Note that non-ff updates are generally a bad thing for everyone who > has work based on the affected branch. We make it a policy to never base work off individual developer’s branches precisely for this reason, because we’re often making cleanups via rebase and such. Thank you for the answer. - -- Eric James Michael Ritz Cyber Sprocket Labs (843) 225-3830 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iQEcBAEBAgAGBQJMSgEVAAoJEEHUZXw5hMWsu1wIANwTnswKzd0pKub3zms1y2wv ouv2TRvxvpQhKvVO2r+CjDohdH2BQQIa2FWa8g/bG7fQVvGby1xQkWNJYxypebrh GHHX3Q4uF6mNIqD+yC4AQNQdEywCDXL4lBqh0Q7Bo+6ZGhUtQIEp1vyWHQeHTLuZ 8NhWd4PwE4z5ssGGKTzzvg2FgkWxtKrNaCVXfPTHpeh51J/Slt0Jfhw/i/zXNlGU BN0Jlnavhvr5IDbODCNB96KJQue1xLZv+mNNrINlY+TlHwNVyKlq2ui8zvG0vC0K OwwbOh6HlGV1sPReFfbObu6F9oxz6DMcmdHqNtedQPiAmm38EIuFFTa4H1CiYlM= =P2Zr -----END PGP SIGNATURE----- ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Replacing a Remote Branch 2010-07-23 20:48 ` Thomas Rast 2010-07-23 20:52 ` Eric James Michael Ritz @ 2010-07-24 1:17 ` bill lam 2010-07-24 16:03 ` [PATCH 1/2] Document receive.denyDeleteCurrent Thomas Rast 1 sibling, 1 reply; 7+ messages in thread From: bill lam @ 2010-07-24 1:17 UTC (permalink / raw) To: Thomas Rast; +Cc: Eric, git Птн, 23 Июл 2010, Thomas Rast писал(а): > Since + overrides the non-ff check, this means that the remote side > has receive.denyNonFastForwards (see man git-config) enabled (or a > hook to the same effect). Deleting and pushing the new branch merely I also scratched my head why push --force failed to push an amend/rebase branch to assembla. IMO it would be nice to mention this receive.denyNonFastForwards inside man git-push. -- regards, ==================================================== GPG key 1024D/4434BAB3 2008-08-24 gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/2] Document receive.denyDeleteCurrent 2010-07-24 1:17 ` bill lam @ 2010-07-24 16:03 ` Thomas Rast 2010-07-24 16:03 ` [PATCH 2/2] Documentation/git-push: Explain status output in more detail Thomas Rast 2010-07-24 16:07 ` [PATCH v1.1 1/2] Document receive.denyDeleteCurrent Thomas Rast 0 siblings, 2 replies; 7+ messages in thread From: Thomas Rast @ 2010-07-24 16:03 UTC (permalink / raw) To: git; +Cc: Junio C Hamano, bill lam, Eric This option was introduced by 747ca24 (receive-pack: receive.denyDeleteCurrent, 2009-02-08) but never documented. Signed-off-by: Thomas Rast <trast@student.ethz.ch> --- Documentation/config.txt | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/Documentation/config.txt b/Documentation/config.txt index e75434b..fdb90c0 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -1558,6 +1558,10 @@ receive.denyDeletes:: If set to true, git-receive-pack will deny a ref update that deletes the ref. Use this to prevent such a ref deletion via a push. +receive.denyDeleteCurrent:: + If set to true, git-receive,pack will deny a ref update that + deletes the currently checked out branch of a non-bare repository. + receive.denyCurrentBranch:: If set to true or "refuse", git-receive-pack will deny a ref update to the currently checked out branch of a non-bare repository. -- 1.7.2.278.g76edd.dirty ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/2] Documentation/git-push: Explain status output in more detail 2010-07-24 16:03 ` [PATCH 1/2] Document receive.denyDeleteCurrent Thomas Rast @ 2010-07-24 16:03 ` Thomas Rast 2010-07-24 16:07 ` [PATCH v1.1 1/2] Document receive.denyDeleteCurrent Thomas Rast 1 sibling, 0 replies; 7+ messages in thread From: Thomas Rast @ 2010-07-24 16:03 UTC (permalink / raw) To: git; +Cc: Junio C Hamano, bill lam, Eric Mention the effects of the receive.deny* family of options for the "remote rejected" case. While there, also split up the explanation into an easier-to-parse list format. Signed-off-by: Thomas Rast <trast@student.ethz.ch> --- I considered instead patching receive-pack to have more verbose messages, but decided not to, because it's already very verbose (by git standards anyway) and because a doc update has the advantage of immediately showing up in the kernel.org-hosted copies instead of appearing in two years when hosting providers update their gits. Documentation/git-push.txt | 33 +++++++++++++++++++++++---------- 1 files changed, 23 insertions(+), 10 deletions(-) diff --git a/Documentation/git-push.txt b/Documentation/git-push.txt index b68abff..658ff2f 100644 --- a/Documentation/git-push.txt +++ b/Documentation/git-push.txt @@ -200,16 +200,29 @@ summary:: For a successfully pushed ref, the summary shows the old and new values of the ref in a form suitable for using as an argument to `git log` (this is `<old>..<new>` in most cases, and - `<old>...<new>` for forced non-fast-forward updates). For a - failed update, more details are given for the failure. - The string `rejected` indicates that git did not try to send the - ref at all (typically because it is not a fast-forward). The - string `remote rejected` indicates that the remote end refused - the update; this rejection is typically caused by a hook on the - remote side. The string `remote failure` indicates that the - remote end did not report the successful update of the ref - (perhaps because of a temporary error on the remote side, a - break in the network connection, or other transient error). + `<old>...<new>` for forced non-fast-forward updates). ++ +For a failed update, more details are given: ++ +-- +rejected:: + Git did not try to send the ref at all, typically because it + is not a fast-forward and you did not force the update. + +remote rejected:: + The remote end refused the update. Usually caused by a hook + on the remote side, or because the remote repository has one + of the following safety options in effect: + `receive.denyCurrentBranch` (for pushes to the checked out + branch), `receive.denyNonFastForwards` (for forced + non-fast-forward updates), `receive.denyDeletes` or + `receive.denyDeleteCurrent`. See linkgit:git-config[1]. + +remote failure:: + The remote end did not report the successful update of the ref, + perhaps because of a temporary error on the remote side, a + break in the network connection, or other transient error. +-- from:: The name of the local ref being pushed, minus its -- 1.7.2.278.g76edd.dirty ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v1.1 1/2] Document receive.denyDeleteCurrent 2010-07-24 16:03 ` [PATCH 1/2] Document receive.denyDeleteCurrent Thomas Rast 2010-07-24 16:03 ` [PATCH 2/2] Documentation/git-push: Explain status output in more detail Thomas Rast @ 2010-07-24 16:07 ` Thomas Rast 1 sibling, 0 replies; 7+ messages in thread From: Thomas Rast @ 2010-07-24 16:07 UTC (permalink / raw) To: git; +Cc: Junio C Hamano, bill lam, Eric This option was introduced by 747ca24 (receive-pack: receive.denyDeleteCurrent, 2009-02-08) but never documented. Signed-off-by: Thomas Rast <trast@student.ethz.ch> --- Argh, there was a typo ("receive,pack") in the first version. Why do I only notice them on the 4th reading. Sorry for the noise. Documentation/config.txt | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/Documentation/config.txt b/Documentation/config.txt index e75434b..fdb90c0 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -1558,6 +1558,10 @@ receive.denyDeletes:: If set to true, git-receive-pack will deny a ref update that deletes the ref. Use this to prevent such a ref deletion via a push. +receive.denyDeleteCurrent:: + If set to true, git-receive-pack will deny a ref update that + deletes the currently checked out branch of a non-bare repository. + receive.denyCurrentBranch:: If set to true or "refuse", git-receive-pack will deny a ref update to the currently checked out branch of a non-bare repository. -- 1.7.2.278.g76edd.dirty ^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2010-07-24 16:07 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-07-23 20:14 Replacing a Remote Branch Eric James Michael Ritz 2010-07-23 20:48 ` Thomas Rast 2010-07-23 20:52 ` Eric James Michael Ritz 2010-07-24 1:17 ` bill lam 2010-07-24 16:03 ` [PATCH 1/2] Document receive.denyDeleteCurrent Thomas Rast 2010-07-24 16:03 ` [PATCH 2/2] Documentation/git-push: Explain status output in more detail Thomas Rast 2010-07-24 16:07 ` [PATCH v1.1 1/2] Document receive.denyDeleteCurrent Thomas Rast
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.