git: squash / fixup ранее коммит

Dispatcher - это компонент WPF, а не компонент WinForms.

Если вы хотите отправлять рабочие элементы в поток пользовательского интерфейса, вам придется либо использовать Control.BeginInvoke, как вы уже нашли, или реагировать на ResetEvents / WaitObjects по потокам.

Обычно вызывать рабочие элементы в потоке пользовательского интерфейса - это плохо, если только это не произведение пользовательского интерфейса (то есть обновление содержимого элемента управления или что-то еще), и в этом случае Control .BeginInvoke () будет достаточным.

24
задан Michael Petrotta 4 March 2011 в 23:33
поделиться

4 ответа

Если вы просто ищете простое решение для исправления предыдущих коммитов, прочитайте вопрос! Это все объясняет. Но так как Эльмарко просил скользкий путь, здесь мы идем:

Начиная с Git 1.7.0, есть опция --autosquash для rebase , которая делает то, что ты хочешь. Есть также опции --fixup и --squash для commit , чтобы упростить задачу. С помощью псевдонимов вы, вероятно, сможете объединить все это в одну команду.

Я бы предложил перейти на новейший Git для максимальной крутости:

git/Documentation/RelNotes $ grep -i -A1 autosquash\\\|fixup *
1.7.0.txt: * "git rebase -i" learned new action "fixup" that squashes the change
1.7.0.txt-   but does not affect existing log message.
--
1.7.0.txt: * "git rebase -i" also learned --autosquash option that is useful
1.7.0.txt:   together with the new "fixup" action.
1.7.0.txt-
--
1.7.3.txt: * "git rebase -i" peeks into rebase.autosquash configuration and acts as
1.7.3.txt:   if you gave --autosquash from the command line.
1.7.3.txt-
--
1.7.4.txt: * "git commit" learned --fixup and --squash options to help later invocation
1.7.4.txt-   of the interactive rebase.
--
1.7.4.txt: * "git rebase --autosquash" can use SHA-1 object names to name which
1.7.4.txt:   commit to fix up (e.g. "fixup! e83c5163").
1.7.4.txt-
20
ответ дан Jo Liss 4 March 2011 в 23:33
поделиться

Мой текущий рабочий процесс git настолько интенсивен --fixup / --squash, что я написал новую команду git-fixup, которая автоматически обрабатывает большинство раздражающих битов:

  • git fixup показывает измененные файлы, сгруппированные в соответствии с последними коммитами, которые касаются тех же файлов
  • git fixup -a фиксируют все эти изменения при изменении --fixup вместе с их соответствующими «родительскими» коммитами
  • git fixup -r выполняет автоматический git rebase --autosquash для всех фиксаций фиксации.

Многие изменения таковы, что для выполнения работы достаточно только трех приведенных выше команд, без копирования-вставки коммитов. идентификаторы или чтение через git log, чтобы найти правильные --fixup цели.

Источник: https://github.com/ohmu/git-crust

3
ответ дан Mika Eloranta 4 March 2011 в 23:33
поделиться

То, что вы делаете, опасно, если вы делитесь веткой, в которую вносите изменения, с другими людьми. В вашем случае вы переписываете коммит A и перебираете B и C поверх нового A, который является совершенно новым объектом. Любой, кто уже вытащил старый А в свои репозитории, может испортить свой репозиторий, так как история в вашем репозитории «волшебным образом» изменится. Их мерзавец не мог знать, что история была переписана.

Из-за этого факта разработчики Git намеренно не сделали это легким делом, так как вы должны знать о последствиях выполнения такой операции.

0
ответ дан Martin OConnor 4 March 2011 в 23:33
поделиться

Я создал несколько псевдонимов , чтобы упростить использование команд git commit --fixup и git commit --squash, добавленных в git 1.7. Добавьте их к ~/.gitconfig:

[alias]
  fixup = !sh -c 'REV=$(git rev-parse $1) && git commit --fixup $@ && git rebase -i --autosquash $REV^' -
  squash = !sh -c 'REV=$(git rev-parse $1) && git commit --squash $@ && git rebase -i --autosquash $REV^' -

Использование:

$ git commit -am 'bad commit'
$ git commit -am 'good commit'

$ git add .          # Stage changes to correct the bad commit
$ git fixup HEAD^    # HEAD^ can be replaced by the SHA of the bad commit

Плохой коммит может быть несколько коммитов назад.

2
ответ дан bkeepers 4 March 2011 в 23:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: