Неожиданный эффект "git rebase"? - PullRequest
0 голосов
/ 23 июня 2019

Это git log результат до rebase:

$ git log --branches --graph --oneline                                                 
* ea450cb (HEAD -> v1.0) combination lots of modifies..
* d602e25 nnew edit
| * 51bfb5f (master) abc added
|/  
* 11e16ef animals gg
* 78e1630 (origin/master, origin/HEAD, brc) important backup file is forced to commit.
* 7a87267 nc.txt is ignored, anymore.
* 5def0f6 (tag: v2.0) local .ignre and test *.dat files.
* 1591c3a ignoreDir directory *.dat files are ignored.
* f84ad0d log add
* ac462c0 .gitignore test.
* 4d1e437 .gitignore file is added
* b3574db hüloo
*   3389e5c merge2
|\  
| * bb64902 (origin/confl) Change line.
| * 14f7040 İnit for another conflict exercise.
* | ca51aef (tag: v1.0) Truth of line.
* | f4fcc04 Init for another conflict exercise.
|/  
*   0f251b2 Merge branch 'octodog'

Я хочу изменить его следующим образом (только фокус на последние 3 коммита ):

$ git log --branches --graph --oneline                                                 
* 51bfb5f (master) abc added
* ea450cb (HEAD -> v1.0) combination lots of modifies..
* d602e25 nnew edit
* 11e16ef animals gg
* 78e1630 (origin/master, origin/HEAD, brc) important backup file is forced to commit.
* 7a87267 nc.txt is ignored, anymore.
* 5def0f6 (tag: v2.0) local .ignre and test *.dat files.
* 1591c3a ignoreDir directory *.dat files are ignored.
* f84ad0d log add
* ac462c0 .gitignore test.
* 4d1e437 .gitignore file is added
* b3574db hüloo
*   3389e5c merge2
|\  
| * bb64902 (origin/confl) Change line.
| * 14f7040 İnit for another conflict exercise.
* | ca51aef (tag: v1.0) Truth of line.
* | f4fcc04 Init for another conflict exercise.
|/  
*   0f251b2 Merge branch 'octodog'

Но когда я закончил:

$ git checkout master
$ git rebase v1.0

Он превратился в:

$ git log --branches --graph --oneline                                                 
* 8c4a1e6 (HEAD -> master) abc added
* 22b75db animals gg
* 6f88917 important backup file is forced to commit.
* 69ef5c8 nc.txt is ignored, anymore.
* 36a270d local .ignre and test *.dat files.
* 55e7afd ignoreDir directory *.dat files are ignored.
* aac484c log add
* 5d13b95 .gitignore test.
* 51cf1e9 .gitignore file is added
* d1d37cd hüloo
| * ea450cb (v1.0) combination lots of modifies..
| * d602e25 nnew edit
| * 11e16ef animals gg
| * 78e1630 (origin/master, origin/HEAD, brc) important backup file is forced to commit.
| * 7a87267 nc.txt is ignored, anymore.
| * 5def0f6 (tag: v2.0) local .ignre and test *.dat files.
| * 1591c3a ignoreDir directory *.dat files are ignored.
| * f84ad0d log add
| * ac462c0 .gitignore test.
| * 4d1e437 .gitignore file is added
| * b3574db hüloo
| *   3389e5c merge2
| |\  
|/ /  
| * bb64902 (origin/confl) Change line.
| * 14f7040 İnit for another conflict exercise.
* | ca51aef (tag: v1.0) Truth of line.
* | f4fcc04 Init for another conflict exercise.
|/  
*   0f251b2 Merge branch 'octodog'

Как видно из 3389e5c merge2 до 11e16ef animals gg, он применил коммиты дважды.

Почему это не работает, как я ожидаю?Каков путь моей цели?

1 Ответ

0 голосов
/ 23 июня 2019

У вас есть две вещи, называемые v1.0.

Одна - ваша текущая ветвь:

* ea450cb (HEAD -> v1.0) combination lots of modifies..

, а другая - tag:

* | ca51aef (tag: v1.0) Truth of line.

Когда вы спрашиваете Git о v1.0, он обычно выбирает тег, который в данном случае означает commit ca51aef.Это относится к git rebase.

(вместо этого команда git checkout выберет ветвь.)

Чтобы сделать то, что вы хотите, на самом деле, у вас есть несколько вариантов:

  • имя коммита с помощью хеш-идентификатора: git rebase ea450cb
  • имя коммита с более полным именем: git rebase heads/v1.0 или git rebase refs/heads/v1.0
  • fixкорневая проблема, переименовывая ветку: v1.0 не является хорошим именем ветви, но является хорошим именем тега, поэтому сохраните тег и измените имя ветви.
...