Защо "git rebase" оставя противоположни набори от модификации на сцената и в работното копие?

Използвам git -svn като svn клиент. От време на време срещам следния проблем.

  • Започвам с няколко ангажирания в местния ми git клон, празен етап и чисто работно копие.

  • Въвеждам "git svn rebase" в командния ред на Windows, за да променя командата и да поставя съобщението си след тях, за да запази линейната история (това е необходимо, за да се използва git -svn)

  • Всичко върви добре, командата се зарежда и моите постъпки се нулират след това, но ...

    В резултат на това получавам промени в работното копие и променените файлове на сцената, а промените в работното копие са точната оптика на промените на сцената.

Обикновено работя върху това, просто игнорирайки всичко на сцената, което връща промени в работното копие, което е добре, но наистина бих искал да разбера какво се случва тук.

В: Това грешка ли е или нещо, което не разбирам с git rebase?

Забележка. Имах проблем с използването на "git svn fetch" и "git rebase" по-късно.

Забележка. Използвам git за прозорци с голям svn хранилище (10,000+ файлове, 150000+ ревизии), а също така използвам git -extensions. Edit: Използвам го само за да прегледам хранилището и да се ангажирам. Правя нещо друго от командния ред на Windows.

Променете :. По искане на един от коментарите, тук са два снимки на екрана, които ще ви помогнат да разберете проблема. Първо, това е съдържанието на работното копие, второто е съдържанието на сцената. Лесно можете да видите, че и двете са точни:

Работно копие: 2019

9
01 нояб. зададен от Самюел Росил 1 ноември. 2012-11-01 21:45 '12 в 21:45 2012-11-01 21:45
ответ 1 отговор

Това изглежда като грешка. Ако вашата работна директория и индекс са чисти преди преинсталиране, те трябва да са чисти след ребаза; или трябва да се сдобиете с конфликт на сливане и с възможността да го изчистите и да продължите с възстановяването.

Изглежда, че по някаква причина индексът ви остава остарял след прилагане на местните промени.

По принцип съществуват три основни типа текущо състояние на хранилището. Има компилация HEAD, която е състоянието на хранилището от последното фиксиране, и че следващият ви ангажимент ще бъде дете. Той се актуализира правилно по време на рестартирането ви; HEAD сега е вашият локален ангажимент, компенсиран за това, което сте получили от възходящото хранилище.

Ето указател, който трябва да съдържа представа за състоянието на следващото ви поемане. Изглежда проблем. След успешно преинсталиране от чисто дърво, индексът трябва да има същото хранилище под формата на HEAD, но изглежда, че получава остаряла представа за съдържанието на хранилището. Изглежда, че не се актуализира след прилагане на локалните ви поправки над възходящото хранилище.

И тук е вашето работно копие; действителни файлове на вашия диск. По някаква причина, когато ребаза, фиксирането на главата се актуализира правилно и работното дърво се актуализира правилно (или се оставя на мира), но индексът остава в състояние, което се отнася до началното решение, което претоварвате. Това означава, че ако сравните индекса с презаверения си ангажимент, изглежда, че сте върнали промените си и ако сравните работното копие с индекса, изглежда, че сте го добавили обратно.

Няколко неща, които трябва да проверите:

  • Можете ли да ни покажете съдържанието на вашата .git директория след такъв проблем рестартиране? Само списък от файлове на най-високото ниво на .git би бил полезен. Всъщност, пълен списък, включващ имена на файлове, дати за промяна и разрешения, може да даде малко повече информация.
  • Използвате ли го във всяка мрежова файлова система или нещо друго? Мрежовите файлови системи понякога имат проблеми, при които файловете ще останат остарели; Чудя се дали това се случва с вас.
  • Каква версия на git използвате?
3
06 нояб. Отговорът е даден от Брайън Кембъл 06 ноември. 2012-11-06 00:21 '12 в 00:21 ч. 2012-11-06 00:21

Други въпроси относно тагове или Задайте въпрос