git замінити локальну версію на віддалену версію


148

Як я можу сказати git ігнорувати мій локальний файл та взяти той з моєї віддаленої гілки, не намагаючись злитися та не викликати конфліктів?


1
Дивіться ТАК відповідь " команда git для створення однієї гілки як іншої " для всіх поточних можливих способів моделюванняgit merge -s their .
VonC

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

Відповіді:


169

Це найбезпечніше рішення:

git stash

Тепер ви можете робити все, що завгодно, не боячись конфліктів.

Наприклад:

git checkout origin/master

Якщо ви хочете включити віддалені зміни у головну гілку, ви можете зробити:

git reset --hard origin/master

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


90
Можливо, варто зазначити, що це від'єднає git stash; git fetch origin; git reset --hard origin/master
ГОЛОВУ

10
Я думаю, що коментар Марка Лонгайра є фактичною відповіддю на це питання

це була найкорисніша відповідь для мене +1
Андрес

Як повернутися до держави до цього git stash? git stash listпусто.
Лев

Я хочу тебе обійняти
Угур Каздаль

45

Я розумію питання так: ви хочете повністю замінити вміст одного файлу (або виділення) з висхідного потоку. Ви не хочете впливати на індекс безпосередньо (тому ви переходите через додавання + фіксація, як зазвичай).

Просто робіть

git checkout remote/branch -- a/file b/another/file

Якщо ви хочете зробити це для широких підкреслень і замість цього бажаєте вплинути на індекс безпосередньо

git read-tree remote/branch:subdir/

Потім можна (необов'язково) оновити свою робочу копію, виконавши

git checkout-index -u --force

2
Це саме те, що я хотів. Дякую.
AutonomousApps

11

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

У цьому сценарії ви можете просто виконати таку команду:

git checkout -- path/filename

10

Я б заказав віддалений файл із "master" (віддаленого / вихідного сховища) таким чином:

git checkout master <FileWithPath>

Приклад: основні компоненти git checkout / indexTest.html


Для мене так працював "git checkout remote / origin / master <my-file>"
saravanakumar

4

Використовуйте -sабо --strategyваріант у поєднанні з -Xопцією. У своєму конкретному запитанні ви хочете зберегти всі віддалені файли та замінити локальні файли з однойменною назвою.

Замініть конфлікти з віддаленою версією

git merge -s recursive -Xtheirs upstream/master  

використовуватиме віддалену версію репо всіх конфліктуючих файлів.

Замініть конфлікти на локальній версії

git merge -s recursive -Xours upstream/master

буде використовувати локальну версію репо всіх конфліктуючих файлів.

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