Інтерактивну базу даних Git вибирати не потрібно


105

Я на майстра, і я rebase -i <my_branch>

Зрозумів:

noop

# Rebase c947bec..7e259d3 onto c947bec
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x <cmd>, exec <cmd> = Run a shell command <cmd>, and stop if it fails
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

Я хотів би вибрати деякі зобов'язання не всі, оскільки деякі з них не вітаються. Крім того, як вам працювати, коли ви хочете, щоб деякі файли або зміни завжди були "локальними" для якоїсь гілки? Чи є такий помічник, як .gitignore?

Відповіді:


85

Як і неінтерактивна база даних, ви повинні перезавантажитись на певний документ.

За допомогою неінтерактивної бази даних, якщо ви надаєте прямого предка поточного комітету, ви нічого не змінюєте; за допомогою інтерактивної бази даних ви можете редагувати коміти після зобов'язань, на які ви відмовляєтесь, навіть якщо комісія є прямим родоначальником вашої поточної комісії, але вам потрібно вказати цю комісію, яку ви хочете редагувати далі.

Я не знаю подробиць вашої ситуації, але ви, можливо, захочете щось подібне:

# Opportunity to edit or prune commits between origin/master and current branch
git rebase -i origin/master

або

# Edit some of the last ten commits
git rebase -i HEAD~10 # Note that ~10 uses a tilde("~") not a dash("-"_) !

Використання HEAD~*синтаксису працювало для мене, але перший не став.
Дев Єго

25

rebase -iбез діапазону комісій не відображатиметься жодних комітетів. для відновлення останніх, скажімо, 7 комітетів використовуйте наступне:

git rebase -i HEAD~7

будьте обережні, але це перепише історію. не робіть цього, якщо комісії вже натиснуті


на ваше друге запитання: є гілка з вашими змінами ( в основному конфігурація гілка) і регулярно зливати інші гілки в нього. таким чином зміни не перемістяться в інші галузі


9

Під час використання git rebase -iви, як правило, повинні вказувати, з якого вибору виконувати ребайн. Отже, якщо, наприклад, ви хочете видалити деякі елементи з останніх 10 до поточної гілки, ви зробите:

git rebase -i HEAD~10

6

Як уже згадували інші, вам потрібно вказати діапазон фіксації.

git rebase -i <latest-commit-to-be-retained>

(Якщо припустити, що ви перебуваєте в тій самій гілці, що і зобов’язання редагувати) -

Щоб вказати комісії, ви можете використовувати скорочення HEAD ~ 5 або використовувати контрольну суму sha (яку ви можете отримати git log)

Насправді будь-яка фіксація буде виконуватись, якщо вона є попередньою / родоначальницею зобов'язань, які ви хочете видалити / відредагувати / переробити в дереві. Тут буде перераховано всі комітети з <latest-commit-to-be-retained>моменту редактора (визначеного у вашому git config). Зі списку, щоб видалити комітку, просто видаліть цей конкретний рядок, збережіть та вийдіть (vi habbits :)) файл + редактор та виконайтеgit rebase --continue

Щодо другої відповіді я згоден з плетінням

мати гілку зі своїми змінами (в основному це конфігураційна гілка) і регулярно об'єднувати в неї інші гілки. таким чином зміни не перемістяться в інші галузі

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.