Да, вы можете иметь разные изображения. Есть много проектов, которые используют этот шаблон. Например, вы можете проверить это репо: https://github.com/rocker-org/rocker
Изображение r-devel основано на изображении r-base
https://github.com/rocker-org/rocker/blob/master/r-devel/Dockerfile#L4
Эта функция не относится к Rancher. После того как ваши контейнеры будут упакованы в соответствии с вашими потребностями, вы можете использовать Rancher для их запуска.
Алгоритм, который Git использует при вычислении отката различий, требует, чтобы
Определение «смежных» основано на количестве строк по умолчанию из контекста 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
, и он должен лучше понять, что вы имели в виду. Я не знаю, каков список доступных стратегий, и не знаю определения какой-либо стратегии.
мерзавец возвращается - твердость стратегии , если фиксация является слиянием: мерзавец использования возвращаются-m 1
твердости стратегии Похоже, плохая фиксация в какой-то момент была включена в коммит слияния. Ваша фиксация слияния уже снята? Если да, то вы захотите использовать git revert
; вам придется стиснуть зубы и работать с конфликтами. Если нет, то вы, вероятно, можете либо перебазировать, либо вернуться, но вы можете сделать это до фиксации слияния, а затем повторить слияние.
На самом деле мы мало что можем вам помочь в первом случае. После попытки возврата и обнаружения того, что автоматический отказал, вы должны изучить конфликты и исправить их соответствующим образом. Это точно такой же процесс, как и устранение конфликтов слияния; вы можете использовать git status
, чтобы увидеть, где находятся конфликты, отредактировать не объединенные файлы, найти конфликтующие блоки, выяснить, как их разрешить, добавить конфликтующие файлы и, наконец, выполнить фиксацию. Если вы используете git commit
отдельно (без -m
), то всплывающее в вашем редакторе сообщение должно быть шаблоном сообщения, созданным git revert
; вы можете добавить примечание о том, как вы исправляли конфликты, затем сохранить и выйти для фиксации.
Для второго случая, исправления проблемы до вашего слияния, есть два подслучая, в зависимости от того, проделали ли вы больше работы после слияния.Если вы этого не сделали, вы можете просто git reset --hard HEAD ^
прервать слияние, выполнить откат, а затем повторить слияние. Но я предполагаю, что да. Итак, вы в конечном итоге сделаете что-то вроде этого:
git rebase -i <временная ветвь>
, чтобы удалить ошибочную фиксацию) git rebase --onto <временная ветка> <старая слияние фиксации> <реальная ветка >
Вы можете выбрать между
Вы должны выбрать (1), если ошибочное изменение было принято кем-то другим, и (2), если ошибка ограничена частной веткой без отправки.
Git revert - это автоматизированный инструмент для выполнения (1), он создает новую фиксацию, отменяя предыдущую фиксацию. Вы увидите ошибку и удаление в истории проекта, но люди, которые извлекают из вашего репозитория, не столкнутся с проблемами при обновлении. В вашем примере это не работает автоматически, поэтому вам нужно отредактировать myfile (чтобы удалить строку 2), выполнить git add myfile
и git commit
, чтобы разрешить конфликт. В результате вы получите четыре коммита в вашей истории, причем коммит 4 откатит коммит 2.
Если никого не волнует, что ваша история изменится, вы можете переписать его и удалить коммит 2 (вариант 2). Самый простой способ сделать это - использовать git rebase -i 8230fa3
. Вы попадете в редактор, и вы можете выбрать не включать ошибочную фиксацию, удалив фиксацию (и оставив «выбрать» рядом с другими сообщениями фиксации. Прочтите о последствиях этого .