Нарушено ветвление Git, как исправить

У меня проблемы с git (github), потому что я новичок в этом, мой разум думает в SVN, и я думаю, что просто не понимаю этого... пожалуйста, помогите.

Итак, я работал над какой-то веткой_1, делая некоторые изменения и коммиты, затем выполняя git push origin branch_1 (и делая запрос на включение этой ветки), затем снова делая некоторые изменения и коммиты.

затем я решил переключиться на другую функцию, поэтому я сделал git checkout -b branch_2

Я изменил какой-то файл, сделал коммит только этого файла, затем: git push origin branch_2 Но когда я попытался сделать запрос на включение в branch_2, он содержал коммиты как из branch_2, так и некоторые коммиты из branch_1

Мой вопрос в основном, что я сделал не так (как это обычно правильно обрабатывается?) и самое главное, как мне это исправить сейчас? Мне нужно иметь branch_2 только с одним коммитом последних изменений, которые я сделал в нем, и сделать для него запрос на вытягивание с этим одним коммитом.

По сути, мне нужно работать с разными ветвями, переключаясь туда и обратно, выполняя соответствующие коммиты и выполняя запросы на включение для каждой ветки с работой, выполняемой только в соответствующей ветке.

Большое спасибо!


person Avetis Zakharyan    schedule 16.05.2013    source источник


Ответы (1)


Итак, давайте посмотрим, что здесь произошло, на примере. Ниже приводится повторение того, что, как я думаю, вы сделали:

$ git init && touch README && git add README && git commit -m 'Initial commit'
Initialized empty Git repository in /home/peter/ex/.git/
[master (root-commit) 56c1728] Initial commit
 0 files changed
 create mode 100644 README
$ git log --decorate --graph --all --pretty=oneline --abbrev-commit       
* 56c1728 (HEAD, master) Initial commit
$ git checkout -b branch1 
Switched to a new branch 'branch1'
$ git log --decorate --graph --all --pretty=oneline --abbrev-commit
* 56c1728 (HEAD, master, branch1) Initial commit

git checkout -b <new_branch> создаст ветку везде, где находится HEAD. Посмотрите, как branch1 теперь указывает на ту же фиксацию, что и HEAD.

Теперь давайте сделаем несколько коммитов.

$ touch A
$ git add A
$ git commit -m 'Add A'
[branch1 298c3f9] Add A
 0 files changed
 create mode 100644 A
$ touch B
$ git add B
$ git commit -m 'Add B'
[branch1 24ffff3] Add B
 0 files changed
 create mode 100644 B
$ git log --decorate --graph --all --pretty=oneline --abbrev-commit
* 24ffff3 (HEAD, branch1) Add B
* 298c3f9 Add A
* 56c1728 (master) Initial commit

Так что теперь, если мы создадим ветку по адресу HEAD, произойдет вот что.

$ git checkout -b branch2
Switched to a new branch 'branch2'
$ git log --decorate --graph --all --pretty=oneline --abbrev-commit
* 24ffff3 (HEAD, branch2, branch1) Add B
* 298c3f9 Add A
* 56c1728 (master) Initial commit

Вы не собирались этого делать, но продолжали работать над branch2.

$ touch C
$ git add C
$ git commit -m 'Add C'
[branch2 2cdb51b] Add C
 0 files changed
 create mode 100644 C
$ touch D
$ git add D
$ git commit -m 'Add D'
[branch2 db7fa2b] Add D
 0 files changed
 create mode 100644 D
$ git log --decorate --graph --all --pretty=oneline --abbrev-commit
* db7fa2b (HEAD, branch2) Add D
* 2cdb51b Add C
* 24ffff3 (branch1) Add B
* 298c3f9 Add A
* 56c1728 (master) Initial commit

Итак, теперь branch2 опережает master на 4 коммита, но вы действительно хотите, чтобы branch2 был только на 2 коммита впереди мастера ("Добавить C" и "Добавить D"). Мы можем исправить это с помощью git rebase.

$ git rebase --onto master branch1 branch2
First, rewinding head to replay your work on top of it...
Applying: Add C
Applying: Add D
$ git log --decorate --graph --all --pretty=oneline --abbrev-commit
* c8a299f (HEAD, branch2) Add D
* b9325dc Add C
| * 24ffff3 (branch1) Add B
| * 298c3f9 Add A
|/  
* 56c1728 (master) Initial commit

В следующий раз, когда вы создадите ветку, вы можете использовать форму git checkout -b <new_branch> <start_point>.

$ git checkout -b branch3 master
Switched to a new branch 'branch3'
$ git log --decorate --graph --all --pretty=oneline --abbrev-commit
* c8a299f (branch2) Add D
* b9325dc Add C
| * 24ffff3 (branch1) Add B
| * 298c3f9 Add A
|/  
* 56c1728 (HEAD, master, branch3) Initial commit
person Peter Lundgren    schedule 16.05.2013