Git edycja

Git fetch

git fetch -all ściąga informacje o wszystkich branchach

git fetch remote branchZrodlowy:branchDocelowy merguje (tylko fast forward) bez konieczności przełączania się na te branche jako remote można użyć . (lokalne repozytorium)
-x usuwa też ignorowane pliki


Git clean

git clean -n wyświetla co będzie usunięte
-i tryb interaktywny
git clean nieodwracalnieusuwa wszystkie nie śledzone pliki, odwracalnie można to zrobić przez git stash --all ale zapisywane są też śledzone pliki, przeważnie wymaga modyfikatorów -fd


Git checkout

git checkout -b nazwaBrancha tworzy nowego brancha i przechodzi na niego
-B nadpisuje brancha jeśli istniał

git checkout - przełącza się na poprzedniego brancha
to skrót od git checkout @{-1} inne wartości są dozwolone

git checkout -m lub -- merge robi merga na working area (bez commita)

git checkout --ours -- plik lub -- theirs wybór jednej ze stron przy konflikcie

git checkout A...B przełącza się na ostatni wspólny commit z tych branchy

git checkout plik przywraca plik do postaci zapisanej w commicie, może być trzeba poprzedzić plik przez-- plik
git checkout '*.java' przywraca wszystkie pliki .java do postaci zapisanej w ostatnim commicie


Git reset

reset przesuwa HEADa w obrębie brancha, checkout zmienia brancha, oba obsługują --patch do operowania na fragmentach plików
git reset --soft cofa HEAD (czyli commit)
-- mixed (domyslny) cofa HEAD i index (czyli cofa commit i add)
-- hard cofa heada, index i working area (czyli commit, add i edycje)
podając plik jako argument resetu jest on przywracany do zawartości w czasie commitu (podanego jako argument lub HEAD), sam HEAD się nie zmienia
git checkout [branch]--file == git reset [branch] --hard file


Git revert

git revert -m 1 HEAD cofa ostatni commit (i wskazuje ktory rodzic obowiazuje, przy commitach mergujacych) 1 to branch docelowy 2 mergowany
robi problemy w przypadku chęci wprowadzenia cofniętych zmian w innym branchu, rozwiazanie to revert commitu ktory revertował


Git add

git add -A dodaje do indeksu wszystko
git add . dodaje nowe i zmodyfikowane bez usuniętych
git add -u dodaje zmodyfikowane i usunięte bez nowych

git add -i dodaje interaktywnie

git add -p lub --patch umożliwia dodawanie fragmentów plików

Jeśli * przy dodawaniu jest poprzedzone \ wtedy dodawana jest też zawartość podkatalogów

git rm oraz git mv robią to samo co Unixowe odpowiedniki plus dodanie do indeksu


Git commit

git commit -a dodaje do indeksu wszystkie śledzone pliki

git commit --amend „dokleja” zawartość indeksu do ostatniego commitu, można zmodyfikować wiadomość przez -m

git commit --interactivetryb interaktywny, nie ma krótszej wersji i


Git stash

git stash dodaje do stasha tylko śledzone pliki, jest równoważne z git stash save
git stash -include-untracked lub -u dodaje też nieśledzone
git stash --all dodaje też ignorowane

git stash show daje mniej informacji niż git show

git stash apply stash@{2} wprowadza zmiany z drugiego stasha

drop usuwa stasha
popwprowadza zmiany i usuwa
branchwprowadza zmiany i usuwa


Git merge

git merge co doCzego

git merge --no-commit dodaje do indeksu i nie commituje

git merge master @{upstream} lub @{u} zastępuje to nazwę brancha zdalnego (origin/master)

git merge --abort

git merge -s ours lub theirs narzuca strategię mergowania

git merge-base szuka wspólnego przodka dwóch lub więcej commitów, przy trzech argumentach szuka przodka pierwszego oraz commita mergującego drugi i trzeci, jeśli ma nie brać pod uwagę commita mergującego trzeba dodać parametr --octopus


Git rebase

git rebase master server „dokleja” master do serwera

git pull --rebase zmiana domyślnego działania pulla

git rebase -i pozwala modyfikować każdy z commitów
git rebase --skip pomija problematyczny commit
git rebase --abort cofa rebase

git rebase --onto podstawa doPominiecia docelowy dokleja do podstawy commity z docelowego (który jest odbity od pominiętego doPominięcia)

Źródła:
„Pro Git” 2nd ed. Scott Chacon, Ben Straub
Dokumentacja gita

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *