Це те, що я часто використовую:
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;
Зверніть увагу , що це хороша практика , щоб не вносити зміни в свій місцевий майстер / розвивати галузь, але замість того, щоб фотографії на іншу гілку для яких - або змін, з ім'ям гілки предварённого за типом зміни, наприклад feat/
, chore/
, fix/
і т.д. Таким чином , вам потрібно тільки тягніть зміни, не натискайте жодних змін від головного. Те саме стосується інших галузей, до яких сприяють інші. Отже, вищезазначене слід використовувати лише у тому випадку, якщо ви трапили зміни до гілки, до яких зобов’язалися інші, і потрібно їх скинути. В іншому випадку в майбутньому уникайте натискання на гілку, до якої підштовхують інших, замість того, щоб замовити та натиснути на цю гілку через перевірену гілку.
Якщо ви хочете скинути свою локальну гілку до останньої комісії у верхній частині гілки, для мене поки що працює:
Перевірте пульти, переконайтеся , що на вхід і походження, що ви очікуєте, якщо не очікуються , а потім використовувати git remote add upstream <insert URL>
, наприклад , оригінальний GitHub репо , що ви роздвоєний з і / або git remote add origin <insert URL of the forked GitHub repo>
.
git remote --verbose
git checkout develop;
git commit -m "Saving work.";
git branch saved-work;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force
На GitHub ви також можете оформити гілку з тим самим іменем, що і місцева, щоб зберегти роботу там, хоча це не обов'язково, якщо розвиток походження має ті самі зміни, що і місцева гілка збереженої роботи. Я використовую галузь розробки як приклад, але це може бути будь-яка існуюча назва гілки.
git add .
git commit -m "Reset to upstream/develop"
git push --force origin develop
Тоді, якщо вам потрібно об'єднати ці зміни з іншою гілкою, коли є конфлікти, зберігаючи зміни в розробці, використовуйте:
git merge -s recursive -X theirs develop
Під час використання
git merge -s recursive -X ours develop
щоб зберегти суперечливі зміни_назви_відрізку. В іншому випадку використовуйте mergetool з git mergetool
.
З усіма змінами разом:
git commit -m "Saving work.";
git branch saved-work;
git checkout develop;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;
git add .;
git commit -m "Reset to upstream/develop";
git push --force origin develop;
git checkout branch_name;
git merge develop;
Зауважте, що замість upstream / development ви можете використовувати хеш комітів, іншу назву гілки тощо. Використовуйте інструмент CLI, такий як Oh My Zsh, щоб перевірити, чи є ваша гілка зеленою, що вказує на те, що немає чого робити, і робочий каталог чистий ( що підтверджено або також перевірено git status
). Зверніть увагу , що це може на насправді додати фіксації по порівнянні з вище по течії розвиватися , якщо є що - то автоматично додає фіксацію, наприклад , UML діаграми, ліцензійні заголовки і т.д., так що в цьому випадку, ви могли б тягнути зміни на , origin develop
щоб upstream develop
, в разі необхідності.
git status
другої командиgit reset --hard HEAD
не вдалося. Однак ви не вставили його вихід. → Неповне питання.