2016-04-07 8 views
1

Предположим, что я сделал 10 коммитов на myBranch (и myBranch выписан). Я хочу переустановить с мастером и сквошем все коммиты.Как сократить рабочий процесс перезагрузки?

наш текущие рабочий процесс ...

  1. мастер мерзавца фотографии
  2. мерзавец выборка происхождения
  3. мерзавца тянуть -r происхождения мастера
  4. мерзавца фотографии myBranch
  5. мерзавца перебазироваться -i мастера
  6. git push -f origin myBranch

В общей сложности 6 шагов и интерактивные консоли для перезагрузки, чтобы справиться с ними (не говоря уже о риске нажатия силы).

Есть ли более короткий рабочий процесс, который будет иметь тот же эффект?

ответ

2

У вас нет причин обновлять ветку master, если ваша цель просто для того, чтобы перебалансировать верхнюю линию master. Вы можете заменить эти шаги:

git checkout master 
git fetch origin 
git pull -r origin master 
git checkout myBranch 
git rebase -i master 

С:

git fetch origin 
git rebase -i origin/master 

Если вы хотите, чтобы избежать интерактивной перебазироваться, вы можете делать то, что описано в this answer:

git fetch origin 
git reset --soft origin/master 
git commit -m 'message for merged commit' 

Это сбрасывает текущую ветвь до origin/master, не затрагивая ваш рабочий каталог, и он оставляет все ваши изменения, поставленные в индексе. Это означает, что git commit выполнит все ваши изменения за один шаг.

1
git fetch origin 
git rebase -i origin/master 
git push -f origin myBranch 

или если вы хотите сохранить изменение строф на всех линиях и хотите использовать совершенно новое сообщение фиксации

git fetch origin 
git rebase origin/master 
git reset --soft origin/master 
git commit 
git push -f origin myBranch 

или если вы хотите сохранить изменение строф на всех линии и хотят использовать коммит сообщение от всех раздавил совершает

git fetch origin 
git rebase origin/master 
git reset --soft origin/master 
git commit --edit -m"$(git log --format=%B --reverse [email protected]{1})" 
git push -f origin myBranch 
2

Если все, что вы хотите сделать с вашими местными фиксациями, чтобы раздавить их, вам даже не нужно делать интерактивное перебазирование.Вы можете сделать это с помощью git reset --soft, что гораздо удобнее:

git reset --soft HEAD~10 #soft сброса 10 совершает назад

git commit -m "Message for the squashed commits" #all изменения будут уже включены в индекс в данный момент

Тогда вы может перебазироваться против master ветви пульта:

git fetch origin git rebase origin/master

Обратите внимание, что раздавление коммитов безопасно, если никто (кроме вас) не вытащил эти 10 коммитов с myBranch, иначе вы перепишете историю, и у вас будет плохое время.

Смежные вопросы