2015-03-19 12 views
2

В последнее время я сделал коммит, содержащий десять файлов. Один из файлов не должен был быть зафиксирован: он имеет локальные тестовые изменения, которые не будут работать ни для кого другого.Есть ли легкий способ изменить один файл, который был случайно зафиксирован?

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

git revert Звучит неплохо, но, похоже, для целых коммитов, а не для одного файла в фиксации. Есть ли хороший способ сделать это, сохраняя при этом git chatter/logs до минимума? Возможно, поправьте предыдущий коммит?

Ничего из этого не было нажато, если это помогает.

+0

Вы считаете, что принимаете ответ? – Jubobs

ответ

4

git revert Звучит неплохо, но, похоже, для целых коммитов, а не для одного файла в фиксации.

Нет никакого легкого прикосновения к изменению фиксации. Если вы хотите изменить хотя бы маленькую мелочь в существующем коммите, вам нужно создать новую (с новой SHA), которая просто будет похожа на оригинальную.

Есть ли хороший способ сделать это, сохраняя при этом болтовню git/logs до минимума? (Изменить предыдущий коммит, возможно?)

Если рассматриваемая сделка не является последней в отрасли, git commit --amend не поможет вам; см. this для объяснения. Вы можете использовать git revert или ...

Ничего этого не было еще толкали, если это помогает ...

Поскольку вы не отодвигают дистанционного пока (да, это действительно помогает), вы всегда можете сделать interactive rebase, чтобы переписать историю своего филиала с того места, где сначала был введен оскорбительный файл.

+1

Да, перезагрузка - это ключ здесь! +1 – eckes

3

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

Изменение коммита - отличная идея, если ваша фиксация является последней на ветке (если нет - не беспокойтесь, так как она не нажата, вы можете переписать историю довольно просто). Чтобы получить «старую» версию файла, вы можете просто проверить ее из предыдущего фиксации командой git checkout COMMIT-HASH-ID path_to_file.

Так что, если ваш git log --oneline выглядит результат выглядит следующим образом -

$ git log --oneline 
9ab100f Your awesome 10-file commit message 
e62c6d5 Merge pull request #607 from origin/someone-elses-feature 
cfdf47a someone elses commit message 

Вобще

git checkout e62c6d5 path/to/your_file_name.js 

Затем добавить его на сцену

git add . 

затем изменить

git commit --amend 

Посмотрите на историю, вы должны все хорошо.

+1

Является ли оскорбительная фиксация последней веткой OP неясной. Если это не так, здесь 'git commit -amend' не является правильной командой. – Jubobs

+0

Ты прав, хороший момент. Дайте свой ответ, чтобы улучшить форматирование и ссылку на перезаписывающую главу. – apprenticeDev

+0

Теперь, когда в вашем ответе упоминается ограничение «последний-фиксация», вы можете получить мой верхний плюс :) – Jubobs