1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Gitのリベースでベースが変更される際に、コミット番号が変わる件を確認する

Last updated at Posted at 2019-07-11

概要

Gitを用いていて、わりとわかりにくい「リベース」について。

developブランチと、ある時点のdevelopから派生したfeatureブランチ(feature/dev_#50としました)があったとします。
developがコミットされて先に進んでしまったときに、あたらしい時点のdevelopからの派生として、feature/dev_#50を リベースするシーンがあります。

image.png

こういうことですね。

コミット履歴は前のコミット番号を保持する というGitの性質において、リベースした後のコミットたち(おもに5d6a09d,ef3cd3bのことです)のコミット番号ってどうなるのかな?ってのを見てみます。

前準備

git init
echo "hello" >> Calc.java
echo "hello" >> Calc2.java
git add Calc.java && git add Calc2.java   && git commit -m 'initial'
git checkout -b develop && git checkout -b feature/dev_#50

いま時点の状態を確認します。

$ git log --oneline --graph
* 39eca7c (HEAD -> feature/dev_#50, master, develop) initial
$

develop(39eca7c) から feature/dev_#50 がブランチされました。SourceTreeでみるとこうです。
image.png

つづいて feature/dev_#50 に2回コミットしてみます。

git checkout feature/dev_#50
echo "hello from feature/dev_#50" >> Calc2.java
git commit -a -m '1. modified in dev_#50'

echo "hello from feature/dev_#50" >> Calc2.java
git commit -a -m '2. modified in dev_#50'

いま時点の状態を確認します。

$ git log --oneline --graph
* ef3cd3b (HEAD -> feature/dev_#50) 2. modified in dev_#50
* 5d6a09d 1. modified in dev_#50
* 39eca7c (master, develop) initial
$

develop(39eca7c) から派生した feature/dev_#50 はいま時点 ef3cd3b を指しています。

つづいて、develop に1つコミットします。

git checkout develop
echo "hello from develop" >> Calc.java
git commit -a -m 'modified in develop'

いま時点の状態を確認します。

$ git log --oneline --graph
* f618196 (HEAD -> develop) modified in develop
* 39eca7c (master) initial
$

39eca7c を指していたdevelopはいま、f618196を指しています。feature/dev_#50 との関係を見るためSourceTreeで見てみると、、、

image.png

  • develop は f618196
  • feature/dev_#50 は ef3cd3b

を指していることが図からもわかります。

リベースしてみる。

さてリベースについてです。
リ・ベースとはその名の通り、最初 39eca7cを指していた develop、から派生した feature/dev_#50 を、いまの f618196を指しているdevelop から派生するように切り替えるということです。 図示してみると(最初の図ですが)

image.png

こういうことです。とするとコミットログは、

4番目:ef3cd3b (feature/dev_#50 のコミット2個目)
3番目:5d6a09d (feature/dev_#50 のコミット1個目)
2番目:f618196 (いまのdevelopが指しているコミット)
1番目:39eca7c

となるイメージですが、3,4番目の 5d6a09d,ef3cd3bは、いまのdevelop(f618196) からブランチした後の新たなコミットとなり、新規にコミット番号が振られることになります。

やってみると、、、

git checkout feature/dev_#50
git rebase develop

さあ、いま時点の状態を確認します。

$  git log --oneline --graph
* d227747 (HEAD -> feature/dev_#50) 2. modified in dev_#50
* 503a3d3 1. modified in dev_#50
* f618196 (develop) modified in develop
* 39eca7c (master) initial
$

image.png

想定通りとなりました。

リベースは派生元を切り替えるわけなので、派生先のコミット達は軒並み、新規コミットとしてあつかわれることがわかりましたね。。

おつかれさまでした。

関連リンク

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?