Чи потрібно абсолютно працювати над декількома помилками одночасно? І під "одразу" я маю на увазі "редагування файлів для кількох помилок одночасно". Тому що якщо вам це абсолютно не потрібно, я працюю над однією помилкою одночасно у вашому оточенні. Таким чином, ви можете використовувати локальні гілки & rebase, що мені здається набагато простіше, ніж управління складним сховищем / етапом.
Скажімо, майстер перебуває на команді B. Тепер працюй над помилкою №1.
git checkout -b bug1
Тепер ви знаходитесь у віці помилки1. Внесіть деякі зміни, введіть, чекайте перегляду коду. Це локально, тому ви не зачіпаєте нікого іншого, і зробити патч з git має непросто.
A-B < master
\
C < bug1
Тепер ви працюєте над bug2. Повернутися назад до майстра з git checkout master
. Зробити нову гілку git checkout -b bug2
. Внесіть зміни, введіть, чекайте перегляду коду.
D < bug2
/
A-B < master
\
C < bug1
Давайте зробимо вигляд, що хтось інший здійснює E&F на майстер, поки ви чекаєте на перегляд.
D < bug2
/
A-B-E-F < master
\
C < bug1
Коли ваш код затверджено, ви можете його відновити для повторного керування, виконавши наступні кроки:
git checkout bug1
git rebase master
git checkout master
git merge bug1
Це призведе до наступного:
D < bug2
/
A-B-E-F-C' < master, bug1
Тоді ви можете натиснути, видалити локальну гілку bu11 і вийти. Помилка на робочому просторі, але, використовуючи локальні гілки, ваш сховище може обробляти кілька помилок. І це дозволяє уникнути складного сценічного та сценічного танцю.
Відповідь на питання ctote в коментарях:
Ну, ви можете повернутися до зберігання для кожної помилки, і працювати тільки з однією помилкою за один раз. Принаймні, це рятує вас від постановки. Але спробувавши це, я особисто вважаю це тривожним. Stashes трохи безладно в графіку журналу git. І що ще важливіше, якщо ви щось накрутили, ви не зможете повернутися. Якщо у вас брудна робоча директорія та ви виправляєте скриньку, її не можна "скасувати". Набагато складніше викрутити вже наявні комісії.
Отже git rebase -i
.
Перезавантаживши одну гілку на іншу, ви можете це робити інтерактивно (прапор -i). Коли ви робите це, у вас є можливість вибрати те, що ви хочете робити з кожним комітетом. Pro Git - це дивовижна книга, яка також є в Інтернеті у форматі HTML і має приємний розділ про рисинг та сквош:
http://git-scm.com/book/ch6-4.html
Я вкраду їхній приклад дослівно для зручності. Зробіть вигляд, що у вас є така історія фіксації, і ви хочете перезавантажити та скасувати помилку1 на майстер:
F < bug2
/
A-B-G-H < master
\
C-D-E < bug1
Ось що ви побачите під час введення git rebase -i master bug1
pick f7f3f6d changed my name a bit
pick 310154e updated README formatting and added blame
pick a5f4a0d added cat-file
#
# Commands:
# p, pick = use commit
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
Щоб скосити всі комісії гілки вниз на одну комісію, збережіть першу фіксацію як "вибір" і замініть усі наступні записи "вибору" на "сквош" або просто "с". Ви також отримаєте можливість змінити повідомлення про фіксацію.
pick f7f3f6d changed my name a bit
s 310154e updated README formatting and added blame
s a5f4a0d added cat-file
#
# Commands:
# p, pick = use commit
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
Так, так, розчавлення трохи не болить, але я все-таки рекомендую це при сильному використанні сходів.