Git rebase разъяснения - PullRequest
       18

Git rebase разъяснения

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

Я экспериментировал с git уже несколько недель, и хотя я очень доволен тем, что я могу с ним сделать сейчас, есть некоторые поведения, которые я не могу объяснить в отношении rebase.

Я нашел это изображение, которое, кажется, прекрасно понимает эту концепцию:

enter image description here

Но я не могу заставить его работать таким образом;Вот что я сделал:

Я создал file.txt в папке, запустил git и зафиксировал его.затем я добавил одну строку 'one', commit, новую строку 'two' commit, 'three' ...

Затем я создал новую ветку 'feature', добавил пять и шесть.

и теперь, если я использую мастер git checkout, функцию git rebase, все работает так, как на картинке выше.

Но тогда я решил сбросить настройки и сделать интерактивную перезагрузку:

git rebase -я показываю: а в нано все, что у меня есть, это noop вместо моего списка коммитов ..?Если пройти через него, он все еще работает так же, но почему я не могу решить перефразировать / выбрать / пропустить коммиты в этом случае?

сейчас, если я перезагружаюсь и выполняю слияние, я не вижу никакой разницы:

---- слияние ----

(on master)
git merge feature

$ git log --oneline --all
ec382b3 (HEAD -> master, feature) five
d32ed5c four
1499f19 three
24f93bc two
544c929 one
c78eaba first push

$ git branch -a -v
  feature ec382b3 five
* master  ec382b3 five

---- перебазирование ----

(on master)
git rebase feature

$ git log --oneline --all
ec382b3 (HEAD -> master, feature) five
d32ed5c four
1499f19 three
24f93bc two
544c929 one
c78eaba first push

$ git branch -a -v
  feature ec382b3 five
* master  ec382b3 five

Последнее, но не менее важное, если я перебазируюфункция сверху мастера, а затем

$git rebase -i HEAD~3

pick 1499f19 three
pick d32ed5c four
pick ec382b3 five

отлично, я могу выбрать свои коммиты или стереть их, чтобы пропустить их, НО, помните, что есть одна строка на коммит, скажем, я хочу пропустить четвертую строку / коммит:

Конфликт:

one
two
three
<<<<<<< HEAD
=======
four
five
>>>>>>> ec382b3... five

Во-первых, почему это конфликт?предыдущие коммиты имели

one
two
three

, поэтому конфликта не должно быть, голова действительно ничего не имеет, но, что более важно, даже если четыре и пять являются отдельными коммитами, четыре все еще отображаются после того, как я удалил этот коммит?Я думал, что git сохранил изменения, а не весь файл ...?

Вот несколько вариантов поведения, которые я не понимаю, спасибо.

1 Ответ

2 голосов
/ 19 июня 2019

Конфликт заключается в том, что вы пишете вещи в конце файла на каждом коммите .... что затрудняет работу с git, когда вы выбираете cherry (основа для rebase).Попробуйте выполнить те же самые операции, но в середине файла (сделайте это, 20 строк ... работайте вокруг строки 11), и тогда он не потерпит неудачу.

...