Як впоратися з цим, коли раптом виконання комісії раптом виявляється залежним від іншого, якого ще немає?


13

Я недосвідчений у роботі з Git, але я намагаюся зробити все, щоб звикнути, і поки що я просто використовую його для проектів, над якими працюю поодинці.

Коли я кодую, природно існує деякий підхід зверху вниз (оскільки я не можу знати майбутнє), і є повторювана тема:

Я займаюся деякою роботою.
Я знаходжу, що для того, щоб перетворити свою роботу на щось "товарне", мені потрібно зробити іншу роботу.
Інша робота заслуговує на власну відданість.

Я маю на увазі щось, що компілюється, або щось, що не є загальним безладом.
І я маю на увазі те, що заслуговує на власне зобов'язання. Я маю на увазі те, що я дізнався, що коміти повинні виконувати лише одне.

Те, як я вирішую це, громіздке. Якщо інша робота знаходиться в іншому файлі, я роблю нову гілку, здійснюю там і зливаюся. Якщо робота знаходиться в одному файлі .. тьфу .. Я роблю локальну копію і скидаю файл у стан її в HEAD, роблю необхідну фіксацію, а потім починаю відновлювати свою роботу з копії. Як мені насправді впоратися з цим? Я не уявляю, що це так, чи не так? Я не вважаю цього, тому що він повинен часто зустрічатися з усіма (принаймні, хто не знає майбутнього). А може здається, що мій робочий процес, ймовірно, буде помилковим?


1
Я досить часто опиняюся в одній ситуації, зазвичай, додаючи бібліотеки та конфігурації. Я просто використовую, git statusщоб побачити всі змінені файли та зробити два чи більше комітетів, використовуючи git addпевні файли (замість них git add --all) та здійснюючи поступово.
Chris Cirefice

Ви можете обрати частини файлів за допомогою, git add -pа потім зробити лише ці частини. Це дуже потужна техніка, і я її використовую майже весь час.
eush77

Відповіді:


17

Існує кілька способів вирішити це.

Якщо ви хочете внести зміни для першої фіксації, не втручаючись у ваші поточні зміни, ви можете скористатися git stash. Це відключить усі ваші відкриті зміни, що дозволить вам відновити їх згодом. Використовуйте, git statusщоб побачити, що їх більше немає. Тепер створіть першу комісію, як звикли. Далі ви можете скористатися git stash popдля відновлення своїх початкових змін та створення другої комісії, виконуючи свою основну роботу.

Іншим способом було б зробити всі необхідні зміни, а потім створити два коміти, обидва містять частину вашої роботи. Для цього ви можете використовувати індекс (також відомий як область постановки), наданий git. Це спеціальна область, яку ви можете використовувати для підготовки прихильників. Якщо припустити, що ви змінили кілька файлів, ви можете додати кожен з них до індексу, використовуючи git add. Виконуючи git commitлише файли, додані до індексу, будуть вчинені. git statusпокаже, які частини змін буде здійснено, а які - ні. Наприклад, це буде виглядати так після зміни файлів a.txt, b.txt і c.txt і після цього git add a.txt:

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   a.txt

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   b.txt
        modified:   c.txt

Коли ви працюєте git commitв такому стані, до вашого комітету будуть додані лише зміни в a.txt.

Додатково ви можете переглянути точні зміни, які слід вчинити, використовуючи git diff --cached, що покаже вам різні зміни, які буде здійснено.

Якщо один файл містить зміни для обох комітетів, ви також можете додати до індексу лише його частини, використовуючи "git add --patch b.txt". git надасть вам інтерактивний режим, який запитує вас про кожну зміну даного файлу, якщо його слід додати до індексу. Це може бути складніше, якщо ви зміните рядки поруч один з одним, які потрібно розділити на два коміти, проте є й способи вирішити це.

Якщо ви хочете дізнатися більше про область постановки, ви можете прочитати це: http://gitready.com/beginner/2009/01/18/the-staging-area.html

Ви також можете прочитати більше про інтерактивне додавання тут: http://nuclearsquid.com/writings/git-add/


5

Якщо ви використовуєте графічний інтерфейс для Git, наприклад SourceTree від Atlassian, або git gui, ви можете скористатись частинами файлів і залишити інші частини без розгляду. Насправді ви можете вводити окремі рядки коду.

Я роблю це часто, коли падаю в кролячі нори, як ви описуєте. Це чудовий спосіб зробити це розумне вчинення або вчинення як попередник основного зобов'язання.

Це можна зробити з командного рядка, але це начебто незграбно.

Коли ви можете здійснювати фіксацію на рівні патчу Git та окремих рядків, вам не потрібно створювати нові гілки, зберігати, виконувати, приховувати та об’єднувати. Просто продовжуйте працювати і не порушуйте потік. У вас все добре виходить.


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