Git Rebase: коммит из другой ветки появляется в моей ветке?

По шкале от 1 до 10 мои навыки работы с git равны -5 для всего, кроме вытягивания, фиксации, толчка.

Я выполнял git rebase в своей ветке, чтобы объединить мои слияния, используя git rebase --interactive [my first commit hash] Но, как мы все знаем, это откроет редактор со всеми коммитами после моего первого коммита.

Я хотел втиснуть свой второй коммит в первый коммит, поэтому я разумно решил: «Эй, позвольте мне использовать ту же команду, но с хешем первого коммита, который я вижу перед хешем моего первого коммита». Так я и сделал.

Диаграмма для справки

 master ------- commitX --- my branch --- commit1 --- commit2 --- ... --- commitINF.
 |__________another branch____commitA

Я хотел сжать commit2 в commit1. Для этого я поэкспериментировал с запуском git rebase --interactive commitX, а затем сжал commit2 в commit1 и запустил git push --force-with-lease

После этого я посмотрел на свою ветку, и commit2 был раздавлен в commit1, все в порядке. Но теперь моя ветка также показывает commitX из another branch в истории работы моей ветки со всеми ее изменениями.

Что я сделал не так в этом случае? Как мне в следующий раз раздавить первые два коммита в ветке?

Что еще более важно, как мне удалить commitX из истории моей ветки БЕЗ, удалив его из истории работы репозитория, чтобы он по-прежнему отображался в своей ветке, где он принадлежит?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
38
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ваша диаграмма не очень хороша, но я думаю, что вы хотели нарисовать это:

V -- W -- commitX (master)
     |       |
     |     commit1 -- commit2 -- commitN (mybranch)
     |
   commitA (anotherbranch)

Правильно будет сказать, что если вы хотите объединить commit2 и commit1 вместе, вы должны запросить интерактивную перебазировку, которая начинается как commitX. Это создаст список TODO, начиная с commit1, который вам нужен для выполнения интерактивной перебазировки.

Остальная часть вашего вопроса бессвязна, учитывая диаграмму, которую я представил. Возможно, я не совсем правильно угадал, что вы хотели изобразить.

Но ваше использование таких фраз, как «моя ветка также показывает ...», похоже, подразумевает, что вы думаете, что «ветвь» - это длинная тонкая вещь, состоящая из множества коммитов. Это не так. «Ветвь» в Git — это коммит один, и это все. «История» — это просто то, что вы получаете, когда начинаете идти назад от каждой фиксации к ее родителю.

И так иди никогда не останавливается — пока не доберешься до первого сделанного коммита. На моей диаграмме, например, верный означает, что commitX является частью истории моей ветки, а также W и V. Если вы можете достичь фиксации, идя назад, это часть истории.

Да, вы правы, именно эту схему я и имел в виду. Думаю, я понимаю, что вы имеете в виду, когда говорите о ветке, но с моей стороны возникло недопонимание относительно того, что произошло. Перебазирование из commitX успешно сжало commit2 в commit1. Но в моем случае также произошло перебазирование головы mybranch поверх commitA. Итак, теперь моя история коммитов в графическом интерфейсе (в данном случае на битбакете) показывает commitA а потом commit1, а родителем моей ветки теперь является другая ветка. Я не уверен, почему это произошло вообще, поэтому мой вопрос.

AMR 03.05.2022 20:04

Выбрал ваш ответ, потому что он в конечном итоге помог мне лучше понять, проследить историю и исправить ее. Спасибо!

AMR 03.05.2022 20:34

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

Так что на самом деле, я не перебазировал поверх commitX, как я думал, я перебазировал поверх commitA.

Хотя в конечном итоге мои коммиты 1 и 2 были объединены вместе, как я и хотел, он также перебазировал мою ветку поверх anotherbranch, поэтому я увидел commitA в истории моей ветки.


Решение состояло в том, чтобы просто запустить еще одну интерактивную перебазировку в моей ветке, но на этот раз мне нужно было убедиться, что я запускаю ее на коммите Sha последнего коммита НА МАСТЕРЕ (в этом примере — commitX).

Вам может быть полезно знать, что вещи, которые вы делаете в Git, почти всегда тривиально невыполнимы. См., например, мой stackoverflow.com/a/71750947/341994 при восстановлении после неправильной интерактивной перебазировки.

matt 03.05.2022 21:23

Другая проблема в том, что вы можете не понять, как увидеть красивый график ситуации? Обычное заклинание git log --graph --oneline --decorate

matt 03.05.2022 21:24

Наконец, вам может быть полезно прочитать мой bitinteractive.com/…

matt 03.05.2022 21:25

Другие вопросы по теме