Добавьте изменения к коммитам посередине в Git - PullRequest
14 голосов
/ 04 августа 2011

Как добавить новые изменения в коммиты, которые находятся в середине, я имею в виду не добавлять в верхний коммит.

git log
commit1 <--- HEAD
commit2
commit3

Как добавить изменения непосредственно в commit3, не удаляя commit1 и commit2и затем добавление изменений в commit3.

Нужно ли использовать stash?

Если возможно, укажите ссылку.

Ответы [ 4 ]

13 голосов
/ 04 августа 2011

Вы должны сделать интерактивный ребаз. Прочитайте страницу помощи для git rebase для деталей. Короткий ответ: вы продолжите и зафиксируете свои «средние» изменения как обычно, а затем запустите git rebase -i HEAD~4. Он выведет список последних 3 коммитов в текстовом редакторе. Просто измените порядок коммитов, где самый новый коммит находится посередине, а затем сохраните и выйдите из редактора. Git попытается перестроить историю в новом порядке. Это может закончиться конфликтами. Если это так, исправьте их, как если бы вы конфликтовали слиянием, а затем запустите git rebase --continue после того, как они все исправлены и добавлены. Он говорит вам все это, когда у вас есть конфликт, так что просто прочитайте сообщения об ошибках, и все будет в порядке.

РЕДАКТИРОВАТЬ: на самом деле, похоже, что вы хотите редактировать существующий коммит. В этом случае, когда появится редактор, переместите ваш новый временный коммит, чтобы он был рядом с commit3, а затем измените команду на «squash» с «pick»:

pick 123456 commit3
squash 541343 tmpcommit
pick 654321 commit2
pick 431523 commit1

EDIT2: если ветвь и commit1, commit2 и commit3 уже общедоступны, то вам не следует перебазировать. Опять же, вы не должны изменять коммиты, так что весь вопрос будет спорным. Я предполагаю, что это частный филиал или тот, который, как ожидают другие, будет перебазирован и перемотан.

8 голосов
/ 04 августа 2011

Это можно сделать с помощью git-rebase :

git rebase -i commit3^

В появившемся файле измените pick commit3 на edit commit3.Сохраните и выйдите, затем внесите изменения.Зафиксируйте их как обычно, затем используйте git rebase --continue.Когда вы закончите, вы увидите ваши новые изменения между commit3 и commit 2.вам придется справиться с этим в любом случае.)

2 голосов
/ 04 августа 2011

Создать новую ветку, которая является копией commit3.Добавьте свои изменения и подтвердите.Затем объедините commit2 и commit1 с этой веткой.

0 голосов
/ 04 марта 2019

Вы можете использовать git reset --soft HEAD [commit3-hash].эта команда удаляет commit1 и commit2 из истории, но ее изменения все еще там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...