git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Michael Witten <mfwitten@gmail.com>
To: lancelyons <llyons2@cox.net>
Cc: git@vger.kernel.org
Subject: Re: Git rebase basics
Date: Thu, 14 Jun 2012 05:00:22 -0000	[thread overview]
Message-ID: <af093eb8bd7c4b39a17807c5cb5723e4-mfwitten@gmail.com> (raw)
In-Reply-To: <1339642794317-7561489.post@n2.nabble.com>

On Wed, 13 Jun 2012 19:59:54 -0700 (PDT), Lance

> Sorry about that.. I thought I was being pretty descriptive but maybe I
> missed something.
>
> After we setup Git (msysgit) and set it up using Apache with active
> directory authentication, I added a repository using git init --bare then I
> copied my files I wanted to add to the repository and did a git add . and
> git commit -a
>
> So that all worked.   We have done several clones using git clone with this
> remote repo.  We have also done  git push and git pull to verify everything
> is working ok.   Everything was working fine.
>
> So back to my original train of though.
>
> I am trying to learn more about rebase so i have cloned the central repo two
> times  (I call the central repo the origin) doing the following (to help you
> understand)
>
> git clone https://servername:port/repopath c:\clonedrepo1
>
> git clone https://servername:port/repopath c:\clonedrepo2
>
> and then made changes to this cloned copy (clonedrepo1) and pushed two
> commits back to origin.
> (git commit -a  two times)
>
> so now I have the following in the remote repo (origin)   
>
> origin -->  C1 --> C2
>
> (Note to help you understand  C1 = commit 1 and c2 = commit 2, etc)
>
> In the other cloned copy (clonedrepo2), which I consider a branch, I have
> made two more commits  C3 and C4
>
> clonedrepo2 --> C3 -->  C4
>
> I am able to easily pull from origin to get my clonedrepo2 to look like 
> clonerepo2 --> C3 --> C4 --> C1 --> C2 using git pull origin  or git pull
> https://servername:port/repopath
>
> however I was wanting to rebase the clonedrepo2 branch so that it shows   
> clonerepo2 -> C1 --> C2 --> C3 --> C4
>
> In other words I am wanting to rebase clonedrepo2 to the master of the
> origin.
>
>
> I thought the command to do this was   git rebase origin master but that
> doesnt work and I get
>
> C:\clonedrepo2>git rebase origin master
> Switched to branch 'master'
> Your branch is ahead of 'origin/master' by 2 commits.
> Current branch master is up to date.
>
> I know my my branch is ahead by c3 and c4 but it does not have C1 and C2
>
> Thoughts.

This is what I SUPPOSE you mean (using a bash prompt):

  $ git init temp; cd temp
  $ echo 0 > a; git add a; git commit -m C0
  $ cd ..; git clone --bare temp origin; rm -rf temp
  $ git clone origin clonedrepo1
  $ git clone origin clonedrepo2
  $ cd clonedrepo1
  $ echo 1 > a; git commit -am C1
  $ echo 2 > a; git commit -am C2
  $ git push
  $ cd ../clonedrepo2
  $ echo 0 > b; git add b; git commit  -m C3
  $ echo 1 > b;            git commit -am C4
  $ # The following line is essentially `git pull',
  $ # but it would appear that `git pull' is currently
  $ # ignorant of merge's `-m' flag for specifying a
  $ # commit message on the command line.
  $ git fetch; git merge -m C5 origin/master # Essentially `git pull'
  $ git log --format=%s --graph
  *   C5
  |\  
  | * C2
  | * C1
  * | C4
  * | C3
  |/  
  * C0

Notice how the history splits at C0, and then merges back together
at C5; it's not actually the case that C1 has been made a child
of C4 (I'm guessing you have used `git log' to see a linearized
output, which does not reflect the topology of the graph).

The simplest solution would have been to tell `git pull' to perform
a rebase rather than a merge:

  git pull --rebase

We can simulate having done so by resetting our work
and pulling again:

  $ git reset --hard :/C4 # Reset back to C4; see `git help rev-parse'
  $ git branch C4 # Save this original C4 for later reference
  $ git log --format=%s --graph
  * C4
  * C3
  * C0
  $ git pull --rebase
  $ git log --format=%s --graph
  * C4
  * C3
  * C2
  * C1
  * C0

The line:

  git pull --rebase

Is essentially just the same as before, except that a rebase
rather than a merge is performed, essentially equivalent to
the following:

  git fetch; git rebase origin/master

which is something you could certainly do by hand to fix
the problem without performing the additional fetch:

  $ git reset --hard C4 # Go back to the original C4 commit
  $ git rebase origin/master

Sincerely,
Michael Witten

      parent reply	other threads:[~2012-06-14  5:15 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-13 20:59 Git rebase basics lancelyons
2012-06-14  0:07 ` Michael Witten
2012-06-14  2:59 ` lancelyons
2012-06-14  4:39   ` Hilco Wijbenga
2012-06-14 16:01     ` lancelyons
2012-06-14 16:28       ` Michael Witten
2012-06-14 17:21         ` lancelyons
2012-06-14  5:00   ` Michael Witten [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=af093eb8bd7c4b39a17807c5cb5723e4-mfwitten@gmail.com \
    --to=mfwitten@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=llyons2@cox.net \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).