Яке значення скидання git - жорстке походження / майстер?


224

Я зробив git pullі отримав помилку:

Наступні файли робочого дерева будуть замінені об'єднанням ... Будь ласка, перемістіть або видаліть їх, перш ніж ви зможете об'єднатись.

Щоб вирішити це, я зробив наступне:

git fetch
git reset --hard origin/master

Тепер, коли я це роблю git pull, він говорить усе сучасне. Я хочу знати, що саме відбувається, коли я запускаю ці команди. Я знаю, що git fetchотримує зміни з віддаленого репо, не об'єднуючи їх у моє місцеве репо.

У чому сенс git reset --hard origin/master? Як це працює?

Відповіді:


415
git reset --hard origin/master

каже: викиньте всі мої поетапні та незроблені зміни, забудьте все на моєму місцевому відділенні та зробіть це точно таким же, як origin/master.

Ви, напевно, хотіли запитати це, перш ніж запустити команду. На руйнівний характер натякають, використовуючи ті ж слова, що і в "жорсткому перезавантаженні".


9
Ви можете скасувати цей крок за допомогою git reset --hard HEAD@{1}. HEAD@{1}варіюється від ситуації до ситуації, тому вам рекомендується шукати її git reflog.
Нілс Вернер

2
Зауважте, що метод @ NilsWerner для скасування руху не відновлює поетапні та нестандартні зміни. Ті пішли назавжди.
Майкл Андерсон

3
Етапні файли все ще можна знайти за допомогою git fsck --lost-found, але вони не будуть приєднані до їх початкового шляху до файлів і можуть бути важкими для розбору.
CB Bailey

1
Часто корисно скинути свою локальну гілку до початкового / головного, коли ви (можливо, випадково) внесли зміни до свого місцевого господаря замість місцевої гілки. Просто створіть локальну гілку для своїх останніх комісій, а потім скиньте свого місцевого майстра на початковий / основний. Потім ви можете об'єднати або відновити базу даних своєї гілки з головним у разі потреби.
Майк Хоппер

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