I did a git pull from a shared git repository, but something went really wrong, after I tried a git revert. Here is the situation now:
$ git stash
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: needs merge
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: needs merge
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: needs merge
Testing/Source/DataStructureAndEncodingDefinition/Cxx/TestDS.cxx: needs merge
Utilities/socketxx/socket++/sockstream.cpp: needs merge
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: needs merge
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: needs merge
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: needs merge
Testing/Source/DataStructureAndEncodingDefinition/Cxx/TestDS.cxx: needs merge
Utilities/socketxx/socket++/sockstream.cpp: needs merge
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: unmerged (2aafac967c35fa4e77c3086b83a3c102939ad168)
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: unmerged (78cc95e8bae85bf8345a7793676e878e83df167b)
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: unmerged (2524db713fbde0d7ebd86bfe2afc4b4d7d48db33)
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: unmerged (4bb4ba78973091eaa854b03c6ce24e8f4af9e7cc)
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: unmerged (ad0982b8b8b4c4fef23e69bbb639ca6d0cd98dd8)
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: unmerged (4868371b7218c6e007fb6c582ad4ab226167a80a)
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: unmerged (f7a1b386b5b13b8fa8b6a31ce1258d2d5e5b13c5)
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: unmerged (6ce299c416fbb3bb60e11ef1e54962ffd3449a4c)
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: unmerged (75c8043a60a56a1130a34cdbd91d130bc9343c1c)
Testing/Source/DataStructureAndEncodingDefinition/Cxx/TestDS.cxx: unmerged (79c2843f2649ea9c87fa57662dafd899a5fa39ee)
...
fatal: git-write-tree: error building trees
Cannot save the current index state
Is there a way to reset all that ?
Thanks
asked Mar 30, 2011 at 7:25
malatmalat
11.8k13 gold badges84 silver badges150 bronze badges
Use
git reset --mixed
instead of git reset --hard. You will not lose any changes.
answered Apr 17, 2013 at 9:19
heracekheracek
7,2513 gold badges14 silver badges10 bronze badges
6
This worked for me:
Do
$ git status
And check if you have Unmerged paths
# Unmerged paths:
# (use "git reset HEAD <file>..." to unstage)
# (use "git add <file>..." to mark resolution)
#
# both modified: app/assets/images/logo.png
# both modified: app/models/laundry.rb
Fix them with git add to each of them and try git stash again.
git add app/assets/images/logo.png
answered Mar 28, 2014 at 19:37
David Rz AyalaDavid Rz Ayala
2,1451 gold badge20 silver badges21 bronze badges
4
To follow up on malat’s response, you can avoid losing changes by creating a patch and reapply it at a later time.
git diff --no-prefix > patch.txt
patch -p0 < patch.txt
Store your patch outside the repository folder for safety.
answered Jul 3, 2012 at 19:14
afilinaafilina
8041 gold badge11 silver badges24 bronze badges
2
I used:
git reset --hard
I lost some changes, but this is ok.
answered Mar 30, 2011 at 10:31
malatmalat
11.8k13 gold badges84 silver badges150 bronze badges
2
maybe there are some unmerged paths in your git repository that you have to resolve before stashing.
Peter Oram
6,0132 gold badges27 silver badges40 bronze badges
answered Sep 15, 2011 at 6:23
npetersnpeters
691 silver badge1 bronze badge
1
This happened to me when trying to merge another branch. The merge failed with fatal: git-write-tree: error building trees and complained about a different file that had nothing to do with the merge. My branch then contained the files it had tried to merge, as uncommitted changes.
I cleared the changes it had attempted to merge, then removed the problem file and rebuilt the hash:
git reset --hard;
git rm --cache problem_file.txt;
git hash-object -w problem_file.txt;
The merge then worked.
answered Mar 22, 2022 at 12:42
BadHorsieBadHorsie
14k30 gold badges112 silver badges187 bronze badges
This happened for me when I was trying to stash my changes, but then my changes had conflicts with my branch’s current state.
So I did git reset --mixed and then resolved the git conflict and stashed again.
answered Jul 16, 2019 at 18:06
mfaanimfaani
31.4k18 gold badges156 silver badges278 bronze badges
Issue
I did a git pull from a shared git repository, but something went really wrong, after I tried a git revert. Here is the situation now:
$ git stash
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: needs merge
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: needs merge
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: needs merge
Testing/Source/DataStructureAndEncodingDefinition/Cxx/TestDS.cxx: needs merge
Utilities/socketxx/socket++/sockstream.cpp: needs merge
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: needs merge
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: needs merge
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: needs merge
Testing/Source/DataStructureAndEncodingDefinition/Cxx/TestDS.cxx: needs merge
Utilities/socketxx/socket++/sockstream.cpp: needs merge
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: unmerged (2aafac967c35fa4e77c3086b83a3c102939ad168)
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: unmerged (78cc95e8bae85bf8345a7793676e878e83df167b)
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: unmerged (2524db713fbde0d7ebd86bfe2afc4b4d7d48db33)
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: unmerged (4bb4ba78973091eaa854b03c6ce24e8f4af9e7cc)
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: unmerged (ad0982b8b8b4c4fef23e69bbb639ca6d0cd98dd8)
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: unmerged (4868371b7218c6e007fb6c582ad4ab226167a80a)
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: unmerged (f7a1b386b5b13b8fa8b6a31ce1258d2d5e5b13c5)
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: unmerged (6ce299c416fbb3bb60e11ef1e54962ffd3449a4c)
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: unmerged (75c8043a60a56a1130a34cdbd91d130bc9343c1c)
Testing/Source/DataStructureAndEncodingDefinition/Cxx/TestDS.cxx: unmerged (79c2843f2649ea9c87fa57662dafd899a5fa39ee)
...
fatal: git-write-tree: error building trees
Cannot save the current index state
Is there a way to reset all that ?
Thanks
Solution
Use:
git reset --mixed
instead of git reset --hard. You will not lose any changes.
Answered By – heracek
This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0
I did a
git pullfrom a shared git repository, but something went really wrong, after I tried agit revert. Here is the situation now:$ git stash Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: needs merge Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: needs merge Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: needs merge Testing/Source/DataStructureAndEncodingDefinition/Cxx/TestDS.cxx: needs merge Utilities/socketxx/socket++/sockstream.cpp: needs merge Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: needs merge Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: needs merge Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: needs merge Testing/Source/DataStructureAndEncodingDefinition/Cxx/TestDS.cxx: needs merge Utilities/socketxx/socket++/sockstream.cpp: needs merge Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: unmerged (2aafac967c35fa4e77c3086b83a3c102939ad168) Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: unmerged (78cc95e8bae85bf8345a7793676e878e83df167b) Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: unmerged (2524db713fbde0d7ebd86bfe2afc4b4d7d48db33) Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: unmerged (4bb4ba78973091eaa854b03c6ce24e8f4af9e7cc) Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: unmerged (ad0982b8b8b4c4fef23e69bbb639ca6d0cd98dd8) Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: unmerged (4868371b7218c6e007fb6c582ad4ab226167a80a) Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: unmerged (f7a1b386b5b13b8fa8b6a31ce1258d2d5e5b13c5) Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: unmerged (6ce299c416fbb3bb60e11ef1e54962ffd3449a4c) Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: unmerged (75c8043a60a56a1130a34cdbd91d130bc9343c1c) Testing/Source/DataStructureAndEncodingDefinition/Cxx/TestDS.cxx: unmerged (79c2843f2649ea9c87fa57662dafd899a5fa39ee) ... fatal: git-write-tree: error building trees Cannot save the current index stateIs there a way to reset all that ?
Thanks
Answer
Use:
git reset --mixed
instead of git reset --hard. You will not lose any changes.
Attribution
Source : Link , Question Author : malat , Answer Author : heracek
Я сделал git pull из общего хранилища git, но что-то пошло не так, как только я попробовал git revert. Вот ситуация сейчас:
$ git stash
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: needs merge
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: needs merge
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: needs merge
Testing/Source/DataStructureAndEncodingDefinition/Cxx/TestDS.cxx: needs merge
Utilities/socketxx/socket++/sockstream.cpp: needs merge
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: needs merge
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: needs merge
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: needs merge
Testing/Source/DataStructureAndEncodingDefinition/Cxx/TestDS.cxx: needs merge
Utilities/socketxx/socket++/sockstream.cpp: needs merge
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: unmerged (2aafac967c35fa4e77c3086b83a3c102939ad168)
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: unmerged (78cc95e8bae85bf8345a7793676e878e83df167b)
Source/MediaStorageAndFileFormat/gdcmImageCodec.cxx: unmerged (2524db713fbde0d7ebd86bfe2afc4b4d7d48db33)
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: unmerged (4bb4ba78973091eaa854b03c6ce24e8f4af9e7cc)
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: unmerged (ad0982b8b8b4c4fef23e69bbb639ca6d0cd98dd8)
Source/MediaStorageAndFileFormat/gdcmJPEGLSCodec.cxx: unmerged (4868371b7218c6e007fb6c582ad4ab226167a80a)
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: unmerged (f7a1b386b5b13b8fa8b6a31ce1258d2d5e5b13c5)
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: unmerged (6ce299c416fbb3bb60e11ef1e54962ffd3449a4c)
Source/MediaStorageAndFileFormat/gdcmPNMCodec.cxx: unmerged (75c8043a60a56a1130a34cdbd91d130bc9343c1c)
Testing/Source/DataStructureAndEncodingDefinition/Cxx/TestDS.cxx: unmerged (79c2843f2649ea9c87fa57662dafd899a5fa39ee)
...
fatal: git-write-tree: error building trees
Cannot save the current index state
Есть ли способ для reset всего этого?
Спасибо
Ответ 1
Использование:
git reset --mixed
вместо git reset --hard. Вы не потеряете никаких изменений.
Ответ 2
Это сработало для меня:
Do
$ git status
И проверьте, есть ли у вас Unmerged paths
# Unmerged paths:
# (use "git reset HEAD <file>..." to unstage)
# (use "git add <file>..." to mark resolution)
#
# both modified: app/assets/images/logo.png
# both modified: app/models/laundry.rb
Устраните их с помощью git add для каждого из них и повторите попытку git stash.
git add app/assets/images/logo.png
Ответ 3
Чтобы следить за ответом на малат, вы можете избежать потери изменений, создав патч и повторно применив его позднее.
git diff --no-prefix > patch.txt
patch -p0 < patch.txt
Храните патч вне папки хранилища для обеспечения безопасности.
Ответ 4
Я использовал:
git reset --hard
Я потерял некоторые изменения, но это нормально.
Ответ 5
Возможно, в вашем репозитории git есть несколько несвязанных путей, которые необходимо устранить перед тем, как сшить.
Ответ 6
Это произошло для меня, когда я пытался скрыть свои изменения, но затем мои изменения вступили в конфликт с текущим состоянием моей ветки.
Поэтому я сделал git reset --mixed а затем разрешил конфликт git и снова спрятал.
как уже было сказано в другом месте, ответ
git addфайл. например:git add path/to/untracked-file git stashоднако вопрос также возникает в другом ответе: что делать, если вы действительно не хотите добавлять файл? Ну, насколько я могу судить, Вы должны. И следующее будет не работы:
git add -N path/to/untracked/file # note: -N is short for --intent-to-add git stashэто не удастся, как показано ниже:
path/to/untracked-file: not added yet fatal: git-write-tree: error building trees Cannot save the current index stateИтак, что вы можете сделать? Ну, вы должны действительно добавить файл , вы можете эффективно удалить его позже, с
git rm --cached:git add path/to/untracked-file git stash save "don't forget to un-add path/to/untracked-file" # stash w/reminder # do some other work git stash list # shows: # [email protected]{0}: On master: don't forget to un-add path/to/untracked-file git stash pop # or apply instead of pop, to keep the stash available git rm --cached path/to/untracked-fileи тогда вы можете продолжать работать, в том же состоянии, в котором вы были до
git add(именно с неотслеживаемый файл называетсяpath/to/untracked-file; плюс любые другие изменения, которые вы, возможно, должны были отслеживать файлы).еще одна возможность для рабочего процесса на этом будет что-то вроде:
git ls-files -o > files-to-untrack git add `cat files-to-untrack` # note: files-to-untrack will be listed, itself! git stash # do some work git stash pop git rm --cached `cat files-to-untrack` rm files-to-untrack[Примечание: как уже упоминалось в комментарии @mancocapac, вы можете добавить
--exclude-standardк (так,git ls-files -o --exclude-standard).]… который также может быть легко написан-даже псевдонимы будут делать (представлены в синтаксисе zsh; отрегулируйте по мере необходимости) [кроме того, я сократил имя файла, чтобы все это поместилось на экране без прокрутки в этом ответе; не стесняйтесь заменять альтернативное имя файла по вашему выбору]:
alias stashall='git ls-files -o > .gftu; git add `cat .gftu`; git stash' alias unstashall='git stash pop; git rm --cached `cat .gftu`; rm .gftu'обратите внимание, что последний может быть лучше в качестве сценария оболочки или функции, чтобы разрешить параметры для
git stash, в случае, если вы не хочу!—15—> ноapply, и/или хотите иметь возможность указать конкретный тайник, а не просто взять верхний. Возможно, это (вместо второго псевдонима, выше) [пробелы разделены, чтобы соответствовать без прокрутки; повторно добавить для повышения разборчивости]:function unstashall(){git stash "${@:-pop}";git rm --cached `cat .gftu`;rm .gftu}Примечание: в этой форме вам нужно указать аргумент действия, а также идентификатор, если вы собираетесь предоставить идентификатор тайника, например
unstashall apply [email protected]{1}илиunstashall pop [email protected]{1}что конечно, вы бы положили в свой
.zshrcили эквивалент для того чтобы сделать существует долгосрочность.надеюсь, этот ответ кому-то полезен, собирая все вместе в одном ответе.
Как было сказано в другом месте, ответ на git add файл. например:.
git add path/to/untracked-file
git stash
Однако вопрос возникает и в другом ответе: что делать, если вы действительно не хотите добавлять файл? Ну, насколько я могу судить, вам нужно. И следующая работа НЕ:
git add -N path/to/untracked/file # note: -N is short for --intent-to-add
git stash
это не сработает:
path/to/untracked-file: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state
Итак, что вы можете сделать? Ну, вы должны по-настоящему добавить файл, однако, вы можете эффективно его добавить позже, git rm --cached:
git add path/to/untracked-file
git stash save "don't forget to un-add path/to/untracked-file" # stash w/reminder
# do some other work
git stash list
# shows:
# [email protected]{0}: On master: don't forget to un-add path/to/untracked-file
git stash pop # or apply instead of pop, to keep the stash available
git rm --cached path/to/untracked-file
И тогда вы можете продолжить работу в том же состоянии, в котором вы были до git add (а именно с невоспроизводимым файлом под названием path/to/untracked-file, плюс любые другие изменения, которые могли быть отслежены).
Другая возможность для рабочего процесса на этом будет выглядеть примерно так:
git ls-files -o > files-to-untrack
git add `cat files-to-untrack` # note: files-to-untrack will be listed, itself!
git stash
# do some work
git stash pop
git rm --cached `cat files-to-untrack`
rm files-to-untrack
… который также может быть легко написан сценарием — даже псевдонимы будут выполняться (представлены в синтаксисе zsh, при необходимости настраиваются) [также я сократил имя файла, чтобы все это помещалось на экране без прокрутки в этом ответе; не стесняйтесь подставлять альтернативное имя файла по вашему выбору]:
alias stashall='git ls-files -o > .gftu; git add `cat .gftu`; git stash'
alias unstashall='git stash pop; git rm --cached `cat .gftu`; rm .gftu'
Обратите внимание, что последнее может быть лучше как оболочка script или функция, чтобы предоставить параметры для git stash, если вы не хотите pop, но apply и/или хотите уметь указывать конкретный кошелек, а не просто принимать верхний. Возможно, это (вместо второго псевдонима, выше) [пробелы разделены, чтобы они не вписывались без прокрутки; повторно добавить для повышения удобочитаемости]:
function unstashall(){git stash "${@:-pop}";git rm --cached `cat .gftu`;rm .gftu}
Примечание. В этой форме вам необходимо указать аргумент действия, а также идентификатор, если вы собираетесь указать идентификатор прошивки, например. unstashall apply [email protected]{1} или unstashall pop [email protected]{1}
Что вы, конечно, поставили бы в свой .zshrc или эквивалент, чтобы существовать долгосрочно.
Надеюсь, этот ответ полезен кому-то, все вместе собрав в один ответ.
