LINUX.ORG.RU

Нужно изменить один коммит в истории. Что вы сделаете?

 


1

1

1. git rebase -i, перемещение нужного коммита в голову, редактирование, git commit --amend, git-rebase -i обратно на прежнее место.

2. git format-patch, git reset --hard, редактирование, git commit --amend, git am.

3. Редактирование, git commit, git rebase -i, squash.

4. Ваш вариант?



Последнее исправление: delovoi (всего исправлений: 2)

Ответ на: комментарий от intelfx

Можно про это поподробнее? Это по стандарту так?

Да, 12.8 §31 — подсказывает stackoverflow. RVO работает только если ты возвращаешь локальный объект, а ты возвращаешь ссылку на локальный объект (результат std::move). Советую почитать недавнюю книгу Мейерса, там как раз про всё это отлично расписано.

mix_mix ★★★★★
()
Ответ на: комментарий от mix_mix

Отлично.

Похоже (из §32), что так можно делать даже в случае отсутствия конструктора копирования. Вообще отлично.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

Опередили пока писал.

Можно про это поподробнее? Это по стандарту так?

По стандарту (12.8.31) дела обстоят следующим образом:

— in a return statement in a function with a class return type, when the expression is the name of a non-volatile automatic object (other than a function or catch-clause parameter) with the same cv- unqualified type as the function return type, the copy/move operation can be omitted by constructing the automatic object directly into the function’s return value

— in a throw-expression...

when a temporary class object that has not been bound to a reference (12.2) would be copied/moved to a class object with the same cv-unqualified type, the copy/move operation can be omitted by constructing the temporary object directly into the target of the omitted copy/move

— when the exception-declaration of an exception handler...

Я не то чтобы очень хороший толкователь стандарта, но в моём понимании, явный вызов move нарушает эти условия. Тем не менее, на stackoverflow пришли к точно такому же выводу.

Это именно с точки зрения «бюрократии». Вообше, не удивлюсь, если на самом деле компиляторы оптимизировать это будут. Но имхо, на это стоит надеяться меньше, чем на «негарантированное (N)RVO». Да и зачем писать больше?

DarkEld3r ★★★★★
()
Последнее исправление: DarkEld3r (всего исправлений: 1)
Ответ на: комментарий от Xintrea

И вспоминают об этом не сразу

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

KRoN73 ★★★★★
()
Ответ на: комментарий от Dendy

Человек спросил конкретный вопрос про правку коммита на локалхосте, а ему рассказывают какие-то отдалённые вещи

Потому что он на свежие дрожжи попал, на только что отгремевших пару тем на счёт отношения к истории коммитов.

И человек не конкретный вопрос задал, а с пунктом «Ваш вариант?» — вот тут и отметились. Я, например, писал без указания как ему делать. Я описал свой вариант решения вопроса.

KRoN73 ★★★★★
()

Коммиты не надо менять. Надо делать новый коммит. Или ты чего, боишься что твой быдлокод увидит начальство? Быдлокодить надо на отдельных ветках, потом мёржить нормальный код в мастер, а быдлокодоветки удалять.

yvv ★★☆
()
Ответ на: комментарий от KRoN73

И человек не конкретный вопрос задал, а с пунктом «Ваш вариант?»

Все перечисленные ТС варианты про способ исправления коммита, а не абстрактное «решение вопроса». У правки коммитов есть область применения, поэтому и вопрос имеет право на существование. А стратегия ветвления это отдельная тема, хоть и не менее важная.

Dendy ★★★★★
()
Ответ на: комментарий от bbk123

Разве что если у тебя в том коммите приватные данные затесались

Простой rebase, насколько я помню, эту проблему не решает, там целый квест проходить надо.

iVS ★★★★★
()
Ответ на: комментарий от comp00

делаю коммиты перед обедом и в конце дня, вне зависимости от состояния проекта

Работай в мастере проблемы при таком подходе очевидны

Они и так более чем очевидны: коммиты без смысловой нагрузки — бесполезный хлам.

iVS ★★★★★
()
Ответ на: комментарий от iVS

коммиты без смысловой нагрузки

Дык никто и не говорит про коммиты с комментариями «Ушел обедать — нехера не работает». Более того, и на обед никто не уходит с недописанным кодом. Дописываются функции, где это невозможно — пишутся заглушки, запускаются тесты и при успехе делается коммит.

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

comp00 ★★★★
()
Последнее исправление: comp00 (всего исправлений: 1)

git rebase -i, перемещение нужного коммита в голову, редактирование, git commit --amend, git-rebase -i обратно на прежнее место.

Чир простите? Сдается мне вы не правильно git rebase -i используете.

Dudraug ★★★★★
()
Ответ на: комментарий от KRoN73

5. Ничего не делать — история должна быть неприкосновенной.

Нет, я мог банально что-то забыть. И если я еще не запушил, то отправлять в продакшен кривой комит - опрометчиво. Да и могут не принять его даже после обсуждения в мейл листе.

Dudraug ★★★★★
()

ТС случайно форкнул suicide.txt?

edigaryev ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.