Вопрос: Как изменить существующие, нечеткие коммиты?


Я написал неверное в сообщении о фиксации. Кроме того, я забыл включить некоторые файлы.

Как я могу изменить сообщение / файлы фиксации? Конец еще не нажат.


7682


источник


Ответы:


Изменение последнего сообщения о фиксации

git commit --amend

откроет ваш редактор, что позволит вам изменить сообщение фиксации последнего коммита. Кроме того, вы можете установить сообщение commit непосредственно в командной строке:

git commit --amend -m "New commit message"

... однако, это может сделать многострочные сообщения фиксации или небольшие исправления, более громоздкие для ввода.

Убедитесь, что у вас нет каких-либо изменений в рабочей копии поставил перед тем, как сделать это, или они также будут совершены. ( Unstaged изменения не будут совершены.)

Изменение сообщения фиксации, которое вы уже нажали на удаленную ветку

Если вы уже подтолкнули свой фиксатор к удаленной ветке, то вы необходимо принудительно нажать фиксацию с:

git push <remote> <branch> --force
# Or
git push <remote> <branch> -f

Предупреждение: принудительное нажатие перезапишет удаленную ветвь с состоянием вашего локального , Если на удаленной ветке есть коммиты, которых у вас нет в вашем локальном филиале, вы будем потерять эти коммиты.

Предупреждение: будьте осторожны при внесении поправок в то, что вы уже поделились с другими людьми. Внесение поправок в переписывает их иметь разные ША ID, что создает проблему, если у других людей есть копии старой фиксации, которую вы переписали. Любой, у кого есть копия старого коммита, должен будет синхронизировать свою работу с вашим недавно переписанным фиксатором, что иногда может быть затруднено, поэтому убедитесь, что вы координируете работу с другими при попытке переписать общую историю фиксаций или просто не переписываете общие коммиты в целом.


Использовать интерактивную переустановку

Другой вариант - использовать интерактивную перезагрузку.
Это позволяет редактировать любое сообщение, которое вы хотите обновить, даже если это не последнее сообщение.

Чтобы выполнить скриншот git, выполните следующие действия:

// X is the number of commits to the last commit you want to be able to edit
git rebase -i HEAD~X

Как только вы раздавите свои коммиты - выберите e/rдля редактирования сообщения

enter image description here

Важное примечание об интерактивной перестановке

Когда вы используете git rebase -i HEAD~Xможет быть Больше чем Xсовершает. Гит будет «собирать» все коммиты в последнем Xкоммиты, и если бы произошло слияние где-то между этим диапазоном, вы увидите все коммиты, так что результат будет X +.

Хороший совет:

Если вам нужно сделать это для более чем одной ветки, и вы можете столкнуться с конфликтами при изменении содержимого, настройте git rerereи пусть git автоматически разрешит эти конфликты для вас.


Документация


14697



git commit --amend -m "your new message"

2404



Если фиксация, которую вы хотите исправить, не самая последняя:

  1. git rebase --interactive $parent_of_flawed_commit

    Если вы хотите исправить несколько ошибочных коммитов, передайте родительскую часть самой старой из них.

  2. Появится редактор со списком всех фиксаций с момента, когда вы дали.

    1. + Изменить pickв reword(или в старых версиях Git, чтобы edit) перед любыми фиксациями, которые вы хотите исправить.
    2. Как только вы сохраните, Git будет воспроизводить перечисленные коммиты.

  3. Для каждой фиксации вы хотите менять формулировку , Git вернет вас обратно в ваш редактор. Для каждой фиксации вы хотите редактировать , Гит бросает тебя в раковину. Если вы находитесь в оболочке:

    1. Измените фиксацию любым способом.
    2. git commit --amend
    3. git rebase --continue

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


Обратите внимание, что вы не захотите изменять фиксации, которые вы уже нажали. Или, может быть, вы это сделаете, но в этом случае вам придется проявлять большую осторожность, чтобы общаться со всеми, кто, возможно, потянул ваши коммиты и сделал работу поверх них. Как восстановить / повторить синхронизацию после того, как кто-то нажал на переустановку или сброс в опубликованную ветку?


2284



Чтобы внести изменения в предыдущую фиксацию, внесите необходимые изменения и выполните эти изменения, а затем выполните

git commit --amend

Это откроет файл в текстовом редакторе, представляющем ваше новое сообщение фиксации. Он начинает заполняться текстом из вашего старого сообщения фиксации. Измените сообщение фиксации так, как хотите, затем сохраните файл и завершите работу редактора.

Чтобы изменить предыдущую фиксацию и сохранить одно и то же сообщение журнала, запустите

git commit --amend -C HEAD

Чтобы исправить предыдущую фиксацию, полностью удалив ее, запустите

git reset --hard HEAD^

Если вы хотите отредактировать более одного сообщения фиксации, запустите

git rebase -i HEAD~commit_count 

(Заменить commit_count с количеством коммитов, которые вы хотите изменить.) Эта команда запускает ваш редактор. Отметьте первый фиксатор (тот, который вы хотите изменить) как «редактировать» вместо «выбрать», затем сохраните и выйдите из редактора. Внесите изменения, которые вы хотите зафиксировать, а затем выполните

git commit --amend
git rebase --continue

Примечание. Вы можете «Сделать изменение, которое хотите» также из редактора, открытого git commit --amend


746



Как уже упоминалось, git commit --amendэто способ перезаписать последнее коммит. Одна заметка: если вы хотите также перезаписать файлы , команда будет

git commit -a --amend -m "My new commit message"

379



Вы также можете использовать git filter-branchдля этого.

git filter-branch -f --msg-filter "sed 's/errror/error/'" $flawed_commit..HEAD

Это не так просто, как тривиальный git commit --amend, но это особенно полезно, если у вас уже есть некоторые слияния после вашего сообщения с ошибочным фиксацией.

Обратите внимание, что это попытается переписать КАЖДОЙ фиксацию между HEADи ошибочная фиксация, поэтому вы должны выбрать свой msg-filterкоманда очень мудрая ;-)


344



I prefer this way.

git commit --amend -c <commit ID>

Otherwise, there will be a new commit with a new commit ID


304



If you are using the Git GUI tool, there is a button named amend last commit. Click on that button and then it will display your last commit files and message. Just edit that message and you can commit it with new commit message.

Or use this command from a console/terminal:

git commit -a --amend -m "My new commit message"

302



You can use Git rebasing. For example, if you want to modify back to commit bbc643cd, run

$ git rebase bbc643cd^ --interactive

In the default editor, modify 'pick' to 'edit' in the line whose commit you want to modify. Make your changes and then stage them with

$ git add <filepattern>

Now you can use

$ git commit --amend

to modify the commit, and after that

$ git rebase --continue

to return back to the previous head commit.


277