выполняет одно и только одно действие git fetch git checkout git merge git reset git rebase git push . . . Может смёржить как надо, а может и не как надо
одно действие git fetch git checkout git merge git reset git rebase git push . . . (здесь пишем, как именно нам надо) (здесь пишем, как именно нам надо) (здесь пишем, как именно нам надо) (здесь пишем, как именно нам надо) (здесь пишем, как именно нам надо) (здесь пишем, как именно нам надо)
> git config user.name “kisunya” > git config user.email “[email protected]” Кисуня создаёт и настраивает репозиторий. > git config receive.denyCurrentBranch updateInstead Последняя команда: Гит на всякий пожарный “защищает” репозитории на файловой системе от пушей в текущий бранч, а мы экспериментируем и Кисуне (только Кисуне!) этой защиты не нужно.
> git init . > git remote add origin /Users/kisunya/spaceship /Users/zayac/spaceship > git remote -v Заяц непростой человек - он инициирует свой собственный репозиторий и добавляет кисунин репозиторий в виде ремоутного (удалённого). (И в этом нет ничего осудительного)
> git init . > git remote add origin /Users/kisunya/spaceship > git fetch origin master .git README.md /Users/zayac/spaceship README.md > git status > git remote -v > git merge --ff-only origin/master > ls Заяц фетчит мастер-бранч из кисуниного репозитория. (Я не знаю, кстати, почему тут по-разному) (Я просто запомнил, что фетч и пуш так, а рибейз и мёрж по-другому)
Клонировать чужой репозиторий, заиметь его копию. Вытянуть изменения из чужого репозитория (можно изо всех бранчей, можно из конкретного). Положить их в отдельное место и не применять, пока я не решу, как именно я хочу их накатить.
ссылками/алиасами на чужие репозитории. Можно посмотреть их список, можно добавить, можно удалить. Посмотреть историю коммитов в текущем бранче в моей версии репозитория. Посмотреть какие изменения (не обязательно файлы, а изменения) я ещё не закоммитил. Ил
/Users/kisunya/spaceship /Users/slowpoke/spaceship > git сheckout -b engine README.md /Users/zayac/spaceship Ребята распределяют задачи. > git сheckout -b nav Кисуня занимается движком. И Слоу занимается движком. А Заяц будет делать навигашку. (engine) (master) (nav) (Но пока что не знает, как бы ему оказаться в том же бранче, что и Кисуня).
merge 3. Zayac Kisunya Slowpoke README.md /Users/kisunya/spaceship /Users/slowpoke/spaceship > git сheckout -b engine README.md /Users/zayac/spaceship > git сheckout -b nav > git checkout engine Заяц оказался индивидуалистом и поэтому решил вообще ничего не пушать, пока не закончит свою фичу. Имеем ли мы право осудить его за это? Посмотрим позже… (engine) (engine) (nav)
README.md /Users/kisunya/spaceship /Users/slowpoke/spaceship > git add винтики.js шайбоньки.js. README.md /Users/zayac/spaceship > git add ии.js (engine) (engine) (nav) > git add болтики.js винтики.js шайбоньки.js болтики.js ии.js > git commit -m “Моё файло” “Добавил винты и шайбы” Здесь хорошо бы использовать “императив”, но в русском языке такой формы вроде как нет. > git commit -m “Перечислил все болтики” > git commit -m “Искуственный интеллект”
README.md /Users/zayac/spaceship (engine) (engine) (nav) > git push origin engine винтики.js шайбоньки.js болтики.js ии.js Пуш отклонён, потому что Кисуня тоже закоммитил в этот бранч и Слоупок пытается пушнуть именно в Кисунин репозиторий (origin). !rejected
(engine) (nav) > git fetch origin engine винтики.js шайбоньки.js болтики.js ии.js Теперь Слоупок забирает изменения Кисуни. я.jpg > git merge --ff-only origin/engine Нормально же начинали! Отказано! Zayac Kisunya Slowpoke (NB: кстати, после фетча git status показывает как текущий бранч отличается от оригинального)
Объединить коммиты в двух ветках, попробовать fast- forward (без мёрж-коммита), а если не вышло — найти способ смёржить c мёрж-коммитом. Выполняется на git pull. Объединить коммиты в двух ветках без мёрж-коммита. Если так не вышло — оставить всё как есть, без мёржа. Объединить коммиты в двух ветках, создать суммирующие файлы для мёрж-коммита, но не коммитить эти файлы, чтобы мы могли решить, что с ними делать дальше.
историю всех локальных действий. Перейти в истории на указанную позицию (по умолчанию — HEAD). Это очень легко и нестрашно! Отменить мёрж в процессе, всё вернуть как было в начале до него.
origin/engine HEAD@{4} Reset Moving to HEAD HEAD@{6} Merge (recursive) Merge remote branch engine HEAD@{5} Reset Moving to HEAD@{1} HEAD@{2} Rebase Перечислил все болтики Посмотрим историю. > git reflog HEAD@{0} Rebase (Finished) винтики.js шайбоньки.js HEAD@{1} Rebase Фото автора HEAD@{7} git rebase 4.
шайбоньки.js болтики.js ии.js я.jpg > git fetch origin engine шайбоньки.js винтики.js Zayac Kisunya Slowpoke > git merge --ff-only origin/engine > git rebase origin/engine болтики.js git rebase 4. > git rebase --abort Конфликт! Невозможно поменять историю. Откатывается на мёрж. Изменён один и тот же файл, без мёрж-коммита не проходит. Прекращаем рибейз, это легко! я.jpg
шайбоньки.js болтики.js ии.js шайбоньки.js винтики.js Zayac Kisunya Slowpoke болтики.js я.jpg git rebase 4. > git push origin engine И, крайне злой, пушает его прямо в Кисунин репозиторий. Теперь пути назад нет.* *Есть, только если они договорятся и Кисуня отменит мёрж у себя через reflog, а Слоупок не будет вредничать и примет изменения. Только компромисс, в общем. я.jpg
винтики.js шайбоньки.js болтики.js > git push origin master шайбоньки.js винтики.js болтики.js Заяц может ответственно пушать прямо в мастер, что и делает с удовольствием. git rebase 4. Zayac Kisunya Slowpoke я.jpg я.jpg > git checkout master > git merge --ff-only nav винтики.js шайбоньки.js я.jpg ии.js ии.js
Если так не вышло — оставить всё как есть, без мёржа. Резюме. 4. git rebase Взять все новые незапушанные коммиты в текущем бранче, вынуть из истории, и положить по истории сверху (после) коммитов, находящихся в указанном бранче. git rebase --abort Отменить рибейз в процессе, всё вернуть как было в начале до него.
только когда один человек работает в одном бранче.* *И ещё когда стороны могут прийти лично друг к другу, помириться и вместе изменить историю. Но такое случается редко. Крайне редко.