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
prev 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).