Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   git и изменения (https://javascript.ru/forum/offtopic/49966-git-i-izmeneniya.html)

Duda.Ml1986@gmail.com 05.09.2014 12:49

git и изменения
 
Всем привет, пока читаю про сею систему контроля версий возникли вопросы.

1. Допустим я сделал 3 коммита в мастере
2. Потом создал ветку SECOND , в ней коммит и потом смерджил обе ветки, c закрытием последней (SECOND).
3. потом я добавил новый коммит в мастере

Но увидел что в ветке SECOND в том единственном коммите я мог бы кое что изменить, вопрос в том , если я перейду на нее и изменю, отобразится это в текуйщей HEAD коммите изменения прошлого?

Нужно ли вообще закрывать ветки? или лучше пусть будут и легче добавить новый коммит и снова сделать слияние веток?

WorM32 05.09.2014 12:56

Обычно после мержа в мастер ветки удаляются, если считается, что работа в этой ветке завершена.

Если ветка не удалена, то можно в нее просто подмержить мастер и новые правки сделать отдельным коммитом.

kobezzza 05.09.2014 13:05

В гите для слияний есть 2 операции: merge (собственно слияние) и rebase (проецирование коммитов ветки на другую), а ещё есть chery-pick, который позволяет коммит или несколько коммитов зафигачить в другую ветку.

Цитата:

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

У меня сценарий работы обычно такой:

Допустим делают апдейт либы до версии 1.1.

1) Создаю бранч v1.1
2) Когда закончил работу, то мержу его с мастером
3) Убиваю бранч
4) Создаю тег v1.1

Duda.Ml1986@gmail.com 05.09.2014 13:08

теги для удобных checkout - ов, а вот если я хочу изменить этот старый коммит, он будет отображаться в HEAD - е? то есть добавится во все последующие коммиты? или его не будет в последней версии?

kobezzza 05.09.2014 13:10

Цитата:

Сообщение от Duda.Ml1986@gmail.com (Сообщение 329097)
теги для удобных checkout - ов, а вот если я хочу изменить этот старый коммит, он будет отображаться в HEAD - е? то есть добавится во все последующие коммиты? или его не будет в последней версии?

Что мешает попробывать и узнать?:) Я хз, т.к. не изменяю коммиты, а если нужно сделать изменение, то просто сделаю ещё один коммит.

ixth 05.09.2014 13:33

Если никуда не пушил, то пиши изменения в отдельный коммит, а потом делай git rebase -i <коммит, который надо исправить>. Появится список коммитов в редакторе, ты можешь тасовать его как хочешь, в т.ч. взять коммит исправление, поставить его после того коммита, который хочешь исправить и поменять директиву с pick на fixup. Тогда правки из нового коммита сольются с предыдущим.

Правда, если я не ошибаюсь, это изменить хэши всех последующих коммитов, а также может привести к конфликтам в ходе ребейза, но из легко разрешить при помощи git mergetool.


Еще есть альтернативный способ. Как я понимаю, по сути то же, но более автоматизированное: http://fle.github.io/git-tip-keep-yo...utosquash.html

WorM32 08.09.2014 08:57

Цитата:

Сообщение от ixth (Сообщение 329102)
Если никуда не пушил, то пиши изменения в отдельный коммит, а потом делай git rebase -i <коммит

Проще уж тогда git commit --amend.

ixth 08.09.2014 12:06

Цитата:

Сообщение от WorM32 (Сообщение 329431)
Проще уж тогда git commit --amend.

Это если тебе нужно только последний коммит зафиксить, не?


Часовой пояс GMT +3, время: 13:05.