threads / patch / 34180

patchDocumentation/git-push.txt: explain better cases where --force is dangerous

Subject: [PATCH] Documentation/git-push.txt: explain better cases where --force is dangerous

## tl;dr

6 messages between Jun 17, 2013 and Jun 18, 2013. Diffs are folded; open one to read it.

replies: 5people: 4as markdown or json

Matthieu Moy· Jun 17, 2013, 17:52 UTC · lore

The behavior of "git push --force" is rather clear when it updates only one remote ref, but running it when pushing several branches can really be dangerous. Warn the users a bit more and give them the alternative to push only one branch.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
---
 Documentation/git-push.txt | 8 ++++++++
 1 file changed, 8 insertions(+)
Show changes to Documentation/git-push.txt +8 −0
diff --git a/Documentation/git-push.txt b/Documentation/git-push.txt
index 938d1ee..9b9e7d1 100644
--- a/Documentation/git-push.txt
+++ b/Documentation/git-push.txt
@@ -136,6 +136,14 @@ already exists on the remote side.
 	not an ancestor of the local ref used to overwrite it.
 	This flag disables the check.  This can cause the
 	remote repository to lose commits; use it with care.
+	Note that `--force` applies to all the refs that are pushed,
+	hence using it with `push.default` set to `matching` or with
+	multiple push destination configured may override refs other
+	than the current branch (including local refs that are
+	strictly behind their remote counterpart). To force a push to
+	only one branch, use a `+` in front of the refspec to push
+	(e.g `git push origin +master` to force a push to the `master`
+	branch). See the `<refspec>...` section above for details.
 
 --repo=<repository>::
 	This option is only relevant if no <repository> argument is
-- 
1.8.3.1.495.g13f33cf.dirty
Junio C Hamano· Jun 17, 2013, 19:36 UTC · re: Matthieu Moy · lore

Re: [PATCH] Documentation/git-push.txt: explain better cases where --force is dangerous

Matthieu Moy <Matthieu.Moy@imag.fr> writes:
Show 7 quoted lines
> The behavior of "git push --force" is rather clear when it updates only
> one remote ref, but running it when pushing several branches can really
> be dangerous. Warn the users a bit more and give them the alternative to
> push only one branch.
>
> Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
> ---
Looks good.  Thanks.
Show 22 quoted lines
>  Documentation/git-push.txt | 8 ++++++++
>  1 file changed, 8 insertions(+)
>
> diff --git a/Documentation/git-push.txt b/Documentation/git-push.txt
> index 938d1ee..9b9e7d1 100644
> --- a/Documentation/git-push.txt
> +++ b/Documentation/git-push.txt
> @@ -136,6 +136,14 @@ already exists on the remote side.
>  	not an ancestor of the local ref used to overwrite it.
>  	This flag disables the check.  This can cause the
>  	remote repository to lose commits; use it with care.
> +	Note that `--force` applies to all the refs that are pushed,
> +	hence using it with `push.default` set to `matching` or with
> +	multiple push destination configured may override refs other
> +	than the current branch (including local refs that are
> +	strictly behind their remote counterpart). To force a push to
> +	only one branch, use a `+` in front of the refspec to push
> +	(e.g `git push origin +master` to force a push to the `master`
> +	branch). See the `<refspec>...` section above for details.
>  
>  --repo=<repository>::
>  	This option is only relevant if no <repository> argument is
Marc Branchaud· Jun 17, 2013, 21:09 UTC · re: Matthieu Moy · lore

Re: [PATCH] Documentation/git-push.txt: explain better cases where --force is dangerous

On 13-06-17 01:52 PM, Matthieu Moy wrote:
Show 21 quoted lines
> The behavior of "git push --force" is rather clear when it updates only
> one remote ref, but running it when pushing several branches can really
> be dangerous. Warn the users a bit more and give them the alternative to
> push only one branch.
>
> Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
> ---
>   Documentation/git-push.txt | 8 ++++++++
>   1 file changed, 8 insertions(+)
>
> diff --git a/Documentation/git-push.txt b/Documentation/git-push.txt
> index 938d1ee..9b9e7d1 100644
> --- a/Documentation/git-push.txt
> +++ b/Documentation/git-push.txt
> @@ -136,6 +136,14 @@ already exists on the remote side.
>   	not an ancestor of the local ref used to overwrite it.
>   	This flag disables the check.  This can cause the
>   	remote repository to lose commits; use it with care.
> +	Note that `--force` applies to all the refs that are pushed,
> +	hence using it with `push.default` set to `matching` or with
> +	multiple push destination configured may override refs other
s/destination/destinations/
		M.
Junio C Hamano· Jun 17, 2013, 21:38 UTC · re: Marc Branchaud · lore

Re: [PATCH] Documentation/git-push.txt: explain better cases where --force is dangerous

Marc Branchaud <marcnarc@xiplink.com> writes:
Show 24 quoted lines
> On 13-06-17 01:52 PM, Matthieu Moy wrote:
>> The behavior of "git push --force" is rather clear when it updates only
>> one remote ref, but running it when pushing several branches can really
>> be dangerous. Warn the users a bit more and give them the alternative to
>> push only one branch.
>>
>> Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
>> ---
>>   Documentation/git-push.txt | 8 ++++++++
>>   1 file changed, 8 insertions(+)
>>
>> diff --git a/Documentation/git-push.txt b/Documentation/git-push.txt
>> index 938d1ee..9b9e7d1 100644
>> --- a/Documentation/git-push.txt
>> +++ b/Documentation/git-push.txt
>> @@ -136,6 +136,14 @@ already exists on the remote side.
>>   	not an ancestor of the local ref used to overwrite it.
>>   	This flag disables the check.  This can cause the
>>   	remote repository to lose commits; use it with care.
>> +	Note that `--force` applies to all the refs that are pushed,
>> +	hence using it with `push.default` set to `matching` or with
>> +	multiple push destination configured may override refs other
>
> s/destination/destinations/
Good eyes.

After I re-read the one, I found that "override" somewhat a strange expression. There is nothing that overrides or to be overriden.

How about putting it like this?
 Documentation/git-push.txt | 9 +++++++++
 1 file changed, 9 insertions(+)
Show changes to Documentation/git-push.txt +9 −0
diff --git a/Documentation/git-push.txt b/Documentation/git-push.txt
index 8b637d3..21294aa 100644
--- a/Documentation/git-push.txt
+++ b/Documentation/git-push.txt
@@ -124,6 +124,15 @@ no `push.default` configuration variable is set.
 	not an ancestor of the local ref used to overwrite it.
 	This flag disables the check.  This can cause the
 	remote repository to lose commits; use it with care.
+	Note that `--force` applies to all the refs that are pushed,
+	hence using it with `push.default` set to `matching` or with
+	multiple push destinations configured with `remote.*.push`
+	may push out refs other than the current branch (including
+	local refs that are strictly behind their remote counterpart).
+	To force a push to only one branch, use a `+` in front of the
+	refspec to push	(e.g `git push origin +master` to force a push
+	to the `master`	branch). See the `<refspec>...` section above
+	for details.
 
 --repo=<repository>::
 	This option is only relevant if no <repository> argument is
Matthieu Moy· Jun 18, 2013, 07:42 UTC · re: Junio C Hamano · lore

Re: [PATCH] Documentation/git-push.txt: explain better cases where --force is dangerous

Junio C Hamano <gitster@pobox.com> writes:
> After I re-read the one, I found that "override" somewhat a strange
> expression.  There is nothing that overrides or to be overriden.
Right, I actually meant "overwrite".
> How about putting it like this?

I'm not sure "push out refs other than the current branch" is strong enough. Once you are used to "push = fast-forward = can't loose data", "push out a ref" is not very scary.

I'd do s/push out/overwrite/, but I'm fine with your version too.
-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/
Junio C Hamano· Jun 18, 2013, 14:35 UTC · re: Matthieu Moy · lore

Re: [PATCH] Documentation/git-push.txt: explain better cases where --force is dangerous

Matthieu Moy <Matthieu.Moy@grenoble-inp.fr> writes:
Show 15 quoted lines
> Junio C Hamano <gitster@pobox.com> writes:
>
>
>> After I re-read the one, I found that "override" somewhat a strange
>> expression.  There is nothing that overrides or to be overriden.
>
> Right, I actually meant "overwrite".
>
>> How about putting it like this?
>
> I'm not sure "push out refs other than the current branch" is strong
> enough. Once you are used to "push = fast-forward = can't loose data",
> "push out a ref" is not very scary.
>
> I'd do s/push out/overwrite/, but I'm fine with your version too.

OK, I agree that it makes sense to do that substitution. Will queue.

← back to recent threads