Удалите определенную фиксацию

Да, вы можете иметь разные изображения. Есть много проектов, которые используют этот шаблон. Например, вы можете проверить это репо: https://github.com/rocker-org/rocker

Изображение r-devel основано на изображении r-base

https://github.com/rocker-org/rocker/blob/master/r-devel/Dockerfile#L4

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

260
задан tk_ 2 July 2018 в 15:57
поделиться

4 ответа

Алгоритм, который Git использует при вычислении отката различий, требует, чтобы

  1. возвращаемые строки не изменялись никакими более поздними коммитами.
  2. , что не будет никаких других "смежных" коммитов позже в истории.

Определение «смежных» основано на количестве строк по умолчанию из контекста diff, равном 3. Итак, если «myfile» был сконструирован следующим образом:

$ cat >myfile <<EOF
line 1
junk
junk
junk
junk
line 2
junk
junk
junk
junk
line 3
EOF
$ git add myfile
$ git commit -m "initial check-in"
 1 files changed, 11 insertions(+), 0 deletions(-)
 create mode 100644 myfile

$ perl -p -i -e 's/line 2/this is the second line/;' myfile
$ git commit -am "changed line 2 to second line"
[master d6cbb19] changed line 2
 1 files changed, 1 insertions(+), 1 deletions(-)

$ perl -p -i -e 's/line 3/this is the third line/;' myfile
$ git commit -am "changed line 3 to third line"
[master dd054fe] changed line 3
 1 files changed, 1 insertions(+), 1 deletions(-)

$ git revert d6cbb19
Finished one revert.
[master 2db5c47] Revert "changed line 2"
 1 files changed, 1 insertions(+), 1 deletions(-)

Тогда все работает, как ожидалось.

Второй ответ был очень интересным. Есть функция, которая еще не была официально выпущена (хотя она доступна в Git v1.7.2-rc2), называемая стратегией возврата. Вы можете вызвать git следующим образом:

git revert - strategy resolve

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

63
ответ дан 23 November 2019 в 02:37
поделиться

мерзавец возвращается - твердость стратегии , если фиксация является слиянием: мерзавец использования возвращаются-m 1

твердости стратегии
0
ответ дан 23 November 2019 в 02:37
поделиться

Похоже, плохая фиксация в какой-то момент была включена в коммит слияния. Ваша фиксация слияния уже снята? Если да, то вы захотите использовать git revert ; вам придется стиснуть зубы и работать с конфликтами. Если нет, то вы, вероятно, можете либо перебазировать, либо вернуться, но вы можете сделать это до фиксации слияния, а затем повторить слияние.

На самом деле мы мало что можем вам помочь в первом случае. После попытки возврата и обнаружения того, что автоматический отказал, вы должны изучить конфликты и исправить их соответствующим образом. Это точно такой же процесс, как и устранение конфликтов слияния; вы можете использовать git status , чтобы увидеть, где находятся конфликты, отредактировать не объединенные файлы, найти конфликтующие блоки, выяснить, как их разрешить, добавить конфликтующие файлы и, наконец, выполнить фиксацию. Если вы используете git commit отдельно (без -m ), то всплывающее в вашем редакторе сообщение должно быть шаблоном сообщения, созданным git revert ; вы можете добавить примечание о том, как вы исправляли конфликты, затем сохранить и выйти для фиксации.

Для второго случая, исправления проблемы до вашего слияния, есть два подслучая, в зависимости от того, проделали ли вы больше работы после слияния.Если вы этого не сделали, вы можете просто git reset --hard HEAD ^ прервать слияние, выполнить откат, а затем повторить слияние. Но я предполагаю, что да. Итак, вы в конечном итоге сделаете что-то вроде этого:

  • создайте временную ветвь непосредственно перед слиянием и проверьте ее
  • выполните откат (или используйте git rebase -i <временная ветвь> , чтобы удалить ошибочную фиксацию)
  • повторить слияние
  • перебазировать вашу последующую работу обратно: git rebase --onto <временная ветка> <старая слияние фиксации> <реальная ветка >
  • удалить временную ветку
2
ответ дан 23 November 2019 в 02:37
поделиться

Вы можете выбрать между

  1. сохранением ошибки и внесением исправления или
  2. удалением ошибки и изменением истории.

Вы должны выбрать (1), если ошибочное изменение было принято кем-то другим, и (2), если ошибка ограничена частной веткой без отправки.

Git revert - это автоматизированный инструмент для выполнения (1), он создает новую фиксацию, отменяя предыдущую фиксацию. Вы увидите ошибку и удаление в истории проекта, но люди, которые извлекают из вашего репозитория, не столкнутся с проблемами при обновлении. В вашем примере это не работает автоматически, поэтому вам нужно отредактировать myfile (чтобы удалить строку 2), выполнить git add myfile и git commit , чтобы разрешить конфликт. В результате вы получите четыре коммита в вашей истории, причем коммит 4 откатит коммит 2.

Если никого не волнует, что ваша история изменится, вы можете переписать его и удалить коммит 2 (вариант 2). Самый простой способ сделать это - использовать git rebase -i 8230fa3 . Вы попадете в редактор, и вы можете выбрать не включать ошибочную фиксацию, удалив фиксацию (и оставив «выбрать» рядом с другими сообщениями фиксации. Прочтите о последствиях этого .

36
ответ дан 23 November 2019 в 02:37
поделиться
Другие вопросы по тегам:

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