LINUX.ORG.RU

Как перенести коммиты в другую ветку?

 


0

1

Тупняк из цикла «я познаю Git».

$ git log --graph --full-history --all --pretty=format:"%h%x09%d%x20%s"
* c7a9e55        (HEAD -> master, tag: 0.0.2, origin/master, origin/HEAD) fixed microphone position again
* c002049        the 7th summator has been deleted
* 18b4041        fixed microphone position
| * 7844ca2      (origin/controller_test, controller_test) added cyclic polling
| * 76dec1b      added summator counting
| * 1e64d9e      mic state refactoring
| * 429bb32      mic state logging refactoring
| * 2aeaed7      some logging refactoring
| * a3dbe93      added ayncio.open_connection example
| * 517c45e      added .vscode folder to .gitingnore
| * 6f9bd59      some ipc and d12 tests
|/
* 7ca9b68        (tag: 0.0.1) init project in current state

Как синхронизировать теперь ветку controller_test, приняв fix-ы из master?

★★★★★

можно сделать rebase controller_test master, можно merge master controller_test. оба варианта имеют свои преимущества и недостатки. конкретно в случае rebase тебе нужно быть внимательным, если ты не один работаешь этой веткой. тебе придётся сделать push --force, что может быть недоступно иногда. а другим людям придётся сделать pull --force и возможно потерять свои локальные коммиты

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

Есть очень простое правило - работать с веткой только одному. Нет никаких препятствий сделать ветку только для себя. И в ней делай что хочешь. Не забывай только фетчить изменения из основной ветки и переносить свои правки на них (я имею в виду rebase). При переносе своих правок поверх правок в основной ветке да, конфликты возможны, но эти либо следствие кривой архитектуры когда два разных разработчика, решая разные проблемы, изменяют один и тот же код, либо кривая организация труда, когда два разных разработчика решают очень похожие задачи и поэтому работают над одним и тем же кодом.

anonymous
()
Ответ на: комментарий от eternal_sorrow

Да я просто пытался уточнить какой вариант лучше. Так то ответ у тебя исчерпывающий. Просто хотел подтолкнуть ТСа в сторону rebase, т.к. слияние (merge) может превратить лог в кашу, хоть и избавит от конфликтов, которые могут возникнуть при переносе.

Я вообще из секты линейной истории и считаю что разрешение конфликтов небольшая плата за чистый лог.

anonymous
()
Ответ на: комментарий от eternal_sorrow

rebase controller_test master, можно merge master controller_test

а мне в какой ветке нужно быть в данный момент когда я делаю это?

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

если явно указывать что и куда мержить/ребейзить, то неважно

eternal_sorrow ★★★★★
()
Ответ на: комментарий от Turbid
~/dev/vc (controller_test)
$ git rebase controller_test master
Successfully rebased and updated refs/heads/master.


~/dev/vc (master)
$ git log --graph --full-history --all --oneline
* 54b9ed0 (HEAD -> master) fixed microphone position again
* fa0bbea the 7th summator has been deleted
* 379576b fixed microphone position
* 7844ca2 (origin/controller_test, controller_test) added cyclic polling
* 76dec1b added summator counting
* 1e64d9e mic state refactoring
* 429bb32 mic state logging refactoring
* 2aeaed7 some logging refactoring
* a3dbe93 added ayncio.open_connection example
* 517c45e added .vscode folder to .gitingnore
* 6f9bd59 some ipc and d12 tests
| * c7a9e55 (tag: 0.0.2, origin/master, origin/HEAD) fixed microphone position again
| * c002049 the 7th summator has been deleted
| * 18b4041 fixed microphone position
|/
* 7ca9b68 (tag: 0.0.1) init project in current state

все правильно?

Turbid ★★★★★
() автор топика
Ответ на: комментарий от eternal_sorrow
~/dev/vc (master)
$ git reset c7a9e55
Unstaged changes after reset:
M       .gitignore
M       d12/__init__.py
M       example.py
M       example2.py
M       ipcontroller/__init__.py

~/dev/vc (master)
$ git log --graph --full-history --all --oneline
* c7a9e55 (HEAD -> master, tag: 0.0.2, origin/master, origin/HEAD) fixed microphone position again
* c002049 the 7th summator has been deleted
* 18b4041 fixed microphone position
| * 7844ca2 (origin/controller_test, controller_test) added cyclic polling
| * 76dec1b added summator counting
| * 1e64d9e mic state refactoring
| * 429bb32 mic state logging refactoring
| * 2aeaed7 some logging refactoring
| * a3dbe93 added ayncio.open_connection example
| * 517c45e added .vscode folder to .gitingnore
| * 6f9bd59 some ipc and d12 tests
|/
* 7ca9b68 (tag: 0.0.1) init project in current state

~/dev/vc (master)
$ git rebase master controller_test
error: cannot rebase: You have unstaged changes.
error: Please commit or stash them.

Таки пойду я читать букварь…

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

пойди, ага. я не сказал тебе сделать reset --hard потому что возможно у тебя были незакоммиченные изменения (которые бы удалились), но очевидно, тогда мы тебе не удалось сделать rebase. так что сделай reset --hard c7a9e55, а потом rebase, как я сказал тебе ранее.

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

Ты просто перепутал местами аргументы и из-за этого получился другой результат. Ничего страшного, бывает. Тебе нужно просто откатиться назад, на тот коммит, где все еще хорошо (c7a9e55). Откатиться можно через reset, но он изменения оставляет в виде unstaged changes, чтобы они не пропали (что вполне разумно и делает работу с git безопасной). Но эти же изменения тебе мешают сделать rebase (что тоже разумно и тоже сделано из-за соображения безопасности). Выходов тут два - либо спрятать эти изменения, чтобы не мешали через stash (git stash), либо вообще их удалить, если ты знаешь что они не нужны/либо присутствуют в другой ветке. Второй вариант это сделать сразу hard reset git reset --hard c7a9e55, тогда эти изменения буду удалены сразу.

Сделай git stash и затем git rebase master controller_test

anonymous
()
Ответ на: комментарий от eternal_sorrow

Ну зато будет знать, что будет если перепутать аргументы)) Надеюсь, что помогли тебе, ТС.

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

Да, спасибо ребят. Понял что лучше прочитать Pro Git Book - с наскоску не зашло.

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

да делай просто merge и не заморачивайся c rebase-ом

git checkout controller_test 
git merge master

у тебя будут merge-commit-ы, но

  • в них нет ничего страшного
  • когда фича будет готова ты сможешь за-squash-ить все свои коммиты в один (ну что бы не отправлять в master «some logging refactoring»)
pru-mike ★★
()

если один перенести, то git cherry-pick commit-hash

tz4678 ★★
()

ну насколько я понимаю —

git checkout controller_test
git merge master

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