[llvm-dev] I've intertwined two branches

David Lloyd via llvm-dev llvm-dev at lists.llvm.org
Thu Apr 8 11:17:18 PDT 2021


When working with GitHub, it is common to use the `origin` remote to
correspond to your fork of the project.  It's idiomatic to use `upstream`
to refer to the upstream project.  So when you said you pushed up "both
revisions" I assume you meant that you pushed one or both branches to your
fork, via `origin`.  If your `origin` points to the upstream repository, I
would expect a "push" to fail unless you have the appropriate permissions
to create a new branch on the upstream repository.  Since I don't see a
`lists` or `assert` branch on the upstream LLVM repository, I would
conclude that this must be the case.

To answer your question: Git keeps a copy of the branch pointers for every
remote that you fetch from or push to (in Git, a "pull" is a "fetch"
followed by a "merge").  So when you see `origin/xxx` in your log, that
refers to the commit that branch `xxx` on `origin` was pointing to when you
last fetched from or pushed to it.  If you had pushed anything anywhere, I
would expect there to be a branch name in the commit log corresponding to
the remote branch (`origin/xxx`) as well as the local one (`xxx`).

On Thu, Apr 8, 2021 at 1:05 PM Paul C. Anagnostopoulos <
paul at windfall-software.com> wrote:

> I'm sorry, I don't understand your first paragraph. When I ask for a list
> of commits at GitHub, I see what I've included below. I'm also confused by
> 'origin/lists'. Why would there be a 'lists' branch on origin?
>
> . . .
> <https://github.com/llvm/llvm-project/commit/6fccfd7cbdca0c1184cdb77f92329534ffde544c>
>
> [InstCombine] add icmp with no-wrap add tests; NFC
> <https://github.com/llvm/llvm-project/commit/6fccfd7cbdca0c1184cdb77f92329534ffde544c>
> rotateright
> <https://github.com/llvm/llvm-project/commits?author=rotateright>
> committed 5 hours ago
>
> [TableGen] Make behavior of list slice suffix consistent across all v…
> <https://github.com/llvm/llvm-project/commit/14580ce2fdd1898d130b20d9eb21bc4281868e7c>
> Paul C. Anagnostopoulos committed 5 hours ago
>
> [TableGen] Add support for the 'assert' statement in multiclasses
> <https://github.com/llvm/llvm-project/commit/3b9a15d910a8c748b1444333a4a3905a996528bc>
> Paul C. Anagnostopoulos committed 5 hours ago
>
> [CodeGen][AArch64] Fix isel crash for truncating FP stores
> <https://github.com/llvm/llvm-project/commit/1206313f82f819381055dc730294ef50b3af63c9>
> david-arm <https://github.com/llvm/llvm-project/commits?author=david-arm>
> committed 5 hours ago
>
> On 4/8/2021 1:25 PM, David Lloyd wrote:
>
> According to that log, neither `lists` nor `assert` appear on your GitHub
> instance with those commit IDs (if you had successfully pushed `lists`, you
> should expect `lists` to have the same commit ID as `origin/lists`, which
> does not appear in your log at all).
>
> And it's worth noting that amending a commit does not change the commit
> date, unless you explicitly tell it to do so.  You can see the separate
> authorship and commit dates using `git log --pretty=fuller`.  But what you
> see in annotations is probably the authorship date.
>
> On Thu, Apr 8, 2021 at 12:10 PM Paul C. Anagnostopoulos <
> paul at windfall-software.com> wrote:
>
>> But two things are confusing. I only pushed the 'lists' branch, not the
>> 'assert' branch, yet both revisions are up on GitHub. I suppose I should be
>> careful and say that if I pushed 'assert', I don't know how I did it.
>>
>> Also, if you check the dates on the changed lines in the various files,
>> they are dated April 5 for 'lists' and April 1 for 'assert'. But I amended
>> the commit on the 'lists' branch today and then pushed it.
>> On 4/8/2021 1:00 PM, David Lloyd wrote:
>>
>> Branches are just a pointer to a commit ID.  This just means that your
>> local `main`, `lists`, and `assert` branches all point to the same commit
>> ID, which is OK.  Pushing one does not push the others.  When you push a
>> branch e.g. `lists` via `git push origin lists`, what you are doing is
>> telling the remote server "create or change the branch (pointer) on your
>> end called `lists` to refer to the same commit ID as my local branch
>> `lists`".  It also pushes the commits to the server (but this is strictly
>> additive - nothing is lost by this action).  No other remote branches would
>> be affected by this action.
>>
>> It's also possible to push a local branch to a remote branch with a
>> different name; e.g. `git push origin foo:bar` makes a branch called `bar`
>> on the remote side with the same commit ID as the branch called `foo` on
>> the local side.
>>
>> Overall I don't think you've broken anything, it's just that the log
>> output is not completely intuitive.  It's just listing all the branch names
>> that it knows of which happen to point to the corresponding commit ID in
>> the log.
>>
>>
>

-- 
- DML • he/him
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210408/26f417ad/attachment.html>


More information about the llvm-dev mailing list