Ось робочий процес, з яким я зазвичай маю справу на роботі.
git checkout -b feature_branch
# Do some development
git add .
git commit
git push origin feature_branch
На даний момент галузь функцій розглядається моїми колегами, але я хочу продовжувати розробляти інші функції, від яких залежить feature_branch
. Тож поки feature_branch
переглядаємо ...
git checkout feature_branch
git checkout -b dependent_branch
# Do some more development
git add .
git commit
Тепер я вношу деякі зміни у відповідь на огляд коду на feature_branch
git checkout feature_branch
# Do review fixes
git add .
git commit
git checkout dependent_branch
git merge feature_branch
Зараз у нас виникають проблеми. У нас є політика сквошу щодо master, що означає, що гілки об’єктів, які об’єднані в master, повинні бути згорнуті в один коміт.
git checkout feature_branch
git log # Look for hash at beginning of branch
git rebase -i first_hash_of_branch # Squash feature_branch into a single commit
git merge master
Все круто, крім dependent_branch
. Коли я намагаюся перебазувати залежну гілку на master або спробувати об'єднати master в неї, git бентежить перезаписана / зігнута історія і в основному позначає кожну зміну depedendent_branch
як конфлікт. Це PITA, щоб пройти і в основному переробити або деконфліктувати всі зміни dependent_branch
. Чи є якесь рішення цього? Іноді я вручну створюю патч і застосовую його до нової гілки master, але якщо з цим виникають реальні конфлікти, це ще гірше виправити.
git checkout dependent_branch
git diff > ~/Desktop/dependent_branch.diff
git checkout master
git checkout -b new_dependent_branch
patch -p1 < ~/Desktop/dependent_branch.diff
# Pray for a clean apply.
Будь-які ідеї? Я знаю, що це відбувається через переписану історію під час сквошу, але це вимога, яку я не можу змінити. Яке найкраще рішення / обхідне рішення? Чи можу я зробити якусь магію? Або є більш швидкий спосіб зробити всі кроки, пов'язані з ручним створенням різниці?
git add .
це абсолютно зло, і врешті-решт вкусить вас, коли ви закінчите робити те, чого не мали наміру. Ви повинні використовуватиgit add -p
або як мінімумgit add -u .