Git инвертираща област

Имам промени в областта си, докато други все още не са доставени (някои файлове се променят както вътре, така и извън зоната на спиране). Искам да обърна съдържанието на междинната зона и промените, които не са били доставени. Има ли пряк път, за да направите това, без да извършвате по-сложни действия, като например местни странични клонове, или техните различия, или скривалища [и т.н.]? Благодаря.

9
31 янв. моала на 31 януари 2013-01-31 18:05 '13 в 18:05 2013-01-31 18:05
@ 4 отговора

Ето как го правя:

  • Присвояване на временен индекс за корекция
  • Пълна остатък за вторично временно решение
  • Превключете реда на коммити с интерактивна пермутация
  • Смесено нулиране
  • Soft reset

Може да се отпечатва ръчно доста бързо, особено ако използвате Vim съобщения за ангажимент:

4
25 марта '13 в 15:16 2013-03-25 15:16 отговорът е даден gtd 25 март '13 в 15:16 2013-03-25 15:16

Въз основа на отговора на gtd и възможността за инвертиране на скрипта за корекции, това е, което използвам сега:

 [alias] swaplast = !git tag _invert  git reset --hard HEAD~2  git cherry-pick _invert _invert~1  git tag -d _invert invertindex = !git commit -m tmp1  git add -A  git commit -m tmp2  git swaplast  git reset HEAD~1  git reset HEAD~1 --soft 
border=0

Тук написах блога ми: http://blog.ericwoodruff.me/2013/12/inverting-git-index.html

3
08 дек. Отговорът е даден от Eric Woodruff 08 Dec. 2013-12-08 22:43 '13 в 22:43 ч. 2013-12-08 22:43

Може би това е повече от един начин да направите това, но мисля, че бих възприел този подход - понастоящем няма пряк път за това, но можете лесно да напишете свой скрипт, за да следвате този процес:

  • Създайте кръпка за материала, който понастоящем е в работната ви директория, но не във вашия индекс (нещата, за които сте git add за)

     git diff-index --cached -p HEAD > /tmp/staged.patch 
  • Възстановете индекса и работната си директория на HEAD

     git apply --index /tmp/unstaged.patch 
  • Приложете фазовия си пластир само в работната си директория.

    3
31 янв. отговорът е даден на twalberg 31 януари 2013-01-31 19:13 '13 в 19:13 2013-01-31 19:13

Това е, което използвам, за да разреша този проблем.

Първо, git reset , който ще премахне всички файлове от "staging" до "files not set for fixing". Файловете, които се намират както в „постановката“, така и във файловете, които не са зададени за поправка, ще съдържат последните промени, които понастоящем са във „файловете, които не са зададени за поправка“

след това

git add /path/to/file специфични файлове, които трябва да бъдат добавени към опашката

Не съвсем кратко, но той върши работата

След това, след git reset можете да git checkout /path/to/file за файлове, които понастоящем не са настроени да се ангажират, които не искате да добавите към сцената. Това ще премахне определени файлове от "not set for commit".

след това изпълнете git add . което ще добави всички файлове в "не е зададен за ангажимент" в "етап" - в зависимост от това, какво е по-просто за вашата ситуация

0
31 янв. Отговор, даден от Алекс Наспо на 31 януари 2013-01-31 18:13 '13 в 18:13 2013-01-31 18:13

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