Re: Git rebase basics

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]