Слияние веток git merge
У меня есть файл с кодом
print("Hellow world")
Я сделал для него коммит в ветке master
. Потом создал ветку feature
. Поменял код в файле на
with open("file.txt", "w", encoding="utf-8") as f:
f.write("Hello, world!")
Сделал коммит. Переключился на ветку master
и сделал git merge feature
.
Я планировал, чтобы в файле оказался код из обеих веток. Вот что выдал git
:
Updating 0fa9a7c..00b40ce
Fast-forward
file.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
Но содержание файла не изменилось. Как сделать слияние, чтобы в одном файле было оба коммита?
Ответы (1 шт):
Как и обcуждали в комментариях выше, слияние это объединение изменений начиная с общего предка(base). Так же ветку куда сливаем назовем (ours), а откуда (theirs).
В итоге получаем, что (base) + (ours changes) + (theirs changes) -> merge
В вашем случаем происходим самый простой способ слияния (forward) перемоткой, т.е. он просто передвигает указать вперед и все. т.к. base = ours changes.
Если вы хотите реализовать это именно как вы понимаете, то надо сделать 2 ветки, где в каждом своя реализация.
- Начало такое же как и у вас, пишем и коммитим.
- Затем нужно вернуться к прошлому коммиту(есть несколько вариантов):
git checkout '@~'
or
git log --oneline --all
git checkout <копируете и вставляете код прошлого коммита>
' ' - нужны, если вы работаете на windows
- Далее на нем создаете другую ветку и переключаемся на нее:
git checkout -b fix
- Можете посмотреть, что там вообще и где вы:
git log --oneline --all
- Теперь удаляете в файле, что было и меняете на то, что нужно в задании и делаете commit:
//делаете изменения в проекте
git add .
git commit -m 'комментарий'
- Теперь в зависимость откуда куда вы хотите слить изменения вы переключаетесь либо на master или fix и сливаете ваши изменения. Допустим нужно в master:
git switch master
git merge fix
если не будет конфликта, то все пройдет гладко, но т.к. у вас по сути модифицируется одно и тоже место, то он будет.
- Затем зайдете в файл. там появятся спец. метки вы выбираете, что именно сохранить(метки удалить надо) и продолжаете слияние:
git add .
git merge --continue
- Ну вот и все!