Mam pewne lokalne zmiany (nie w osobnych plikach, więc .gitignore nie działa), których nie chcę zatwierdzać.
I robię git reset --hard
czasami po zobowiązuję się do usuwania sporadycznych zmian, ale z obrzydliwością również tracę przydatne zmiany, które chcę opuścić.
Jak mogę zachować przydatne zmiany?Jak mogę zapisać lokalne zmiany, które przetrwają reset git --hard
Odpowiedz
Można też spróbować:
git update-index --skip-worktree -- file
# to cancel it:
git update-index --no-skip-worktree -- file
Należy oprzeć git reset --hard
. (zobacz this answer na temat używania podwójnego łącznika "--
")
Zobacz ten blog post.
- Wygląda
skip-worktree
jest bardzo stara się zachować swoje dane lokalne. Ale to nie przeszkadza Ci uzyskać zmiany w górę, jeśli jest to bezpieczne. Plus git nie resetuje flagi przy ciągnięciu. Ale ignorowanie polecenia "resetuj - trudne" może stać się paskudną niespodzianką dla programisty.- Flaga może zostać utracona podczas operacji przeciągania, a lokalne zmiany w takich plikach nie wydają się ważne dla git.
Założenie niezmienione zakłada, że programista nie powinien zmieniać pliku. Jeśli plik został zmieniony - zmiana nie jest ważna. Ta flaga służy do zwiększania wydajności niezmodyfikowania folderów, takich jak SDK. Ale jeśli obietnica zostanie złamana, a plik zostanie faktycznie zmieniony, git zmieni flagę, aby odzwierciedlić rzeczywistość. Prawdopodobnie w porządku jest posiadanie niespójnych flag w ogólnie nie przeznaczonych do zmiany folderach.Z drugiej strony,
skip-worktree
przydaje się, gdy instruujesz Git, aby nie dotykał konkretnego pliku w historii. Jest to przydatne w przypadku już śledzonego pliku konfiguracyjnego. W głównym repozytorium znajduje się konfiguracja gotowa do produkcji, ale chciałbyś zmienić niektóre ustawienia w konfiguracji, aby móc wykonać lokalne testy. I nie chcesz przypadkowo sprawdzić zmian w takim pliku, aby wpłynąć na konfigurację produkcyjną. W takim przypadkuskip-worktree
tworzy doskonałą scenę.
Możesz użyć git stash
, aby tymczasowo przechowywać zmiany, a następnie pobrać je później - patrz: Pro Git chapter on stashing.
Tak wiem o '' 'git stash''' ale nie chcę przechować zmian za każdym razem. – freemanoid
@freemanoid, ok, udawajmy, że twoje wyimaginowane polecenie 'git preserve-this-and-these-changes' istnieje; następnie za każdym razem, gdy chcesz zachować coś, aby przetrwać "git reset --hard", musisz wywołać to wymyślone polecenie, a następnie wywołać kolejne polecenie, aby "cofnąć" ten stan zachowania, który ustawił na wybranych plikach. Teraz, jak to by się różniło od 'git stash' /' git stash pop'? – kostix
Jeśli nie chcesz, aby te zmiany zostały zatwierdzone, ale zawsze będą potrzebne lokalnie, rozważ utworzenie i zatwierdzenie skryptu lub pliku poprawki dla lokalnych zmian. Następnie możesz przechowywać i dokumentować zmiany, a także łatwo je stosować po twardym resecie.
Jeśli masz zmiany specyficzne dla twojego środowiska, warto je przekazać do pliku konfiguracyjnego.
- 1. Jak zrobić reset git --hard używając gitPython?
- 2. Równoważnik "git reset --hard" z SVN
- 3. Jaka jest różnica między `git reset --hard master` i` git reset --hard origin/master`?
- 4. "git checkout tag-name" vs "git reset --hard tag-name"
- 5. Git Pull ignorując lokalne zmiany?
- 6. Git push nie powiodło się po "git reset - hard HEAD ~ 1" lokalnego repo
- 7. Jak mogę zresetować git - hard HEAD na Mercurial?
- 8. Git: Cofnij zmiany lokalne; git dodaj. + git rm?
- 9. git selective revert zmiany lokalne z pliku
- 10. Jak mogę git pull -rebase, ale biorąc wszystkie zdalne zmiany?
- 11. reset git --hard wisi na CircleCI/Ubuntu 14 z git-lfs <1.5.6
- 12. Jak śledzić lokalne/zmiany zestawów zmian za pomocą git-svn?
- 13. git: jak "skonsolidować" lokalne zobowiązanie
- 14. Jak rozróżnić lokalne, niezatwierdzone zmiany i pochodzenie
- 15. git - jak mogę sklonować lokalne repozytorium svn?
- 16. Jak mogę odzyskać dane po resecie git --hard
- 17. git reset - ignorowanie konkretnych nieśledzonych plików
- 18. Reset Git - trudne i zdalne repozytorium
- 19. Jakie jest znaczenie resetowania git - hard origin/master?
- 20. Czy istnieje hak git, który działa na reset git?
- 21. Git reset = fatal: nie można odczytać drzewa
- 22. Jak zresetować "lokalne" repozytorium git?
- 23. Git lokalne lustro
- 24. Jak zapisać zmiany w stanie odłączonej głowicy?
- 25. poleceń Git do kasy każdą gałąź i zastąpić lokalne zmiany
- 26. Anonimizuj lokalne repozytorium git?
- 27. GitHub - Jak przywrócić zmiany do poprzedniego stanu?
- 28. Jak usunąć niezapisane zmiany [różnica wierszy znaków] w git?
- 29. git pull: mówi mi, żeby ukryć lokalne zmiany przed wyciągnięciem
- 30. Usuń zatwierdzenie git, które nie pchnęło
Dzięki, to działa! Jak mogę usunąć tę flagę? – freemanoid
@freemanoid po prostu 'git update-index --no-skip-worktree - aFile' – VonC
Hmm, nie znalazłem tego podczas patrzenia przez człowieka, ale było tam. Więc '' 'git update-index --no-skip-worktree my_file''' działa. – freemanoid