From: Junio C Hamano <gitster@pobox.com>
To: "Santiago García Pimentel" <santiago@garciapimentel.com>
Cc: git@vger.kernel.org
Subject: Re: git refusing to merge branches when pulling using a refspec
Date: Tue, 07 Nov 2023 08:38:48 +0900 [thread overview]
Message-ID: <xmqqbkc6cv07.fsf@gitster.g> (raw)
In-Reply-To: <FC0625CD-D736-412C-A4C5-04F9F41FFEEA@garciapimentel.com> ("Santiago García Pimentel"'s message of "Mon, 6 Nov 2023 18:36:45 +0100")
Santiago García Pimentel <santiago@garciapimentel.com> writes:
> Hello,
>
> I'm dealing with a small automation (CI) to synchronise some specific branches between two git repositories.
>
> I need to sync a branch with other using a user-given refspec. e.g.
>
> $ git pull origin "refs/heads/branchOrigin:refs/heads/branchDestination”.
>
> (I’ll have a list of refspecs, but so far Im trying to make it work with one)
>
> When the branch can be fast-forwarded there is no problem, but I cannot manage to make it work when it cant.
>
> I just. get the message "[rejected] branchOrigin -> branchDestination (non-fast forward)."
With the "pull" command above, you are doing two logically
independent things. Do you really need to do both?
* git pull "<remote>" "<src>:<dst>" first does a "git fetch" to
locally update <dst> with the commit that is pointed at by <src>
at the <remote> repository.
* then, into the currently checked out HEAD, the <src> taken from
<remote> is merged into.
If you do not need to update <dst> locally, don't give :<dst> part
on the command line.
If you do need to update <dst> locally and safely, then thank that
you got the [rejected] message. Because the <src> was updated at
the <remote> side that is not based on what you have at <dst>
locally, you may be losint commits from your local <dst> if you let
the first stage of the "git pull" go through, and that is what the
failing command is about.
If you do need to update <dst> locally but you do not have anything
valuable on <dst> locally (in other words, <dst> is used only to
keep track of <src> at <remote>, and if <remote> rewinds the history
of their <src> and loses some commits, you want to lose these commits
the same way from your <dst>), then add "+" before the refspec, i.e.
git pull "<remote>" "+<src>:<dst>"
prev parent reply other threads:[~2023-11-06 23:38 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-06 17:36 git refusing to merge branches when pulling using a refspec Santiago García Pimentel
2023-11-06 23:38 ` Junio C Hamano [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqbkc6cv07.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=santiago@garciapimentel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.