Home

Awesome

git-tips

Kolekcjagit-tips, chcesz dodać swoje wskazówki? Sprawdź contributing.md

English | 中文 | Русский | 한국어 | Tiếng Việt | 日本語 | नेपाली | Polski

Narzędzia:

P.S: Wszystkie te polecenia są testowane na git version 2.7.4 (Apple Git-66).

<!-- @doxie.inject start toc --> <!-- Don’t remove or change the comment above – that can break automatic updates. --> <!-- Don’t remove or change the comment below – that can break automatic updates. More info at <http://npm.im/doxie.inject>. --> <!-- @doxie.inject end toc --> <!-- @doxie.inject start --> <!-- Don’t remove or change the comment above – that can break automatic updates. -->

Codziennie Git w około dwudziestu poleceniach

git help everyday

Pokaż przydatne przewodniki dla Git

git help -g

Wyszukaj zmianę według zawartości

git log -S'<a term in the source>'

Pokaż zmiany w czasie dla określonego pliku

git log -p <file_name>

Usuń wrażliwe dane z historii po push

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch <path-to-your-file>' --prune-empty --tag-name-filter cat -- --all && git push origin --force --all

Synchronizuj ze zdalnym, zastępuj lokalne zmiany

git fetch origin && git reset --hard origin/master && git clean -f -d

Lista wszystkich plików do commita

git ls-tree --name-only -r <commit-ish>

Git zresetuj pierwszy commit

git update-ref -d HEAD

Reset: zachowaj niezatwierdzone zmiany lokalne

git reset --keep <commit>

Wyświetl wszystkie skonfliktowane pliki

git diff --name-only --diff-filter=U

Lista wszystkich plików zmienionych w commitcie

git diff-tree --no-commit-id --name-only -r <commit-ish>

Zmienione ale niezaktualizowane zmiany od ostatniego zatwierdzenia

git diff

Porównanie zmian z poczekalni z ostatnią zmianą

git diff --cached

Alternatywnie:

git diff --staged

Pokaż wszystkie zmiany w śledzonych plikach.

git diff HEAD

Lista wszystkich gałęzi, które są już zmergowane do mastera

git branch --merged master

Szybko przełącz na poprzednią gałąź

git checkout -

Alternatywnie:

git checkout @{-1}

Usuń gałęzie które zostały już połączone z master

git branch --merged master | grep -v '^\*' | xargs -n 1 git branch -d

Alternatywnie:

git branch --merged master | grep -v '^\*\|  master' | xargs -n 1 git branch -d # will not delete master if master is not checked out

Wymień wszystkie gałęzie i ich wyższe poziomy, a także ostatnie zatwierdzenie na gałęzi

git branch -vv

Śledź odgałęzienie

git branch -u origin/mybranch

Usuń lokalną gałąź

git branch -d <local_branchname>

Usuń zdalną gałąź

git push origin --delete <remote_branchname>

Alternatywnie:

git push origin :<remote_branchname>
git branch -dr <remote/branch>

Usuń lokalny tag

git tag -d <tag-name>

Usuń zdalny tag

git push origin :refs/tags/<tag-name>

Cofnij zmiany lokalne z ostatnią zawartością w head

git checkout -- <file_name>

Cofnij: Cofnij commita, tworząc nowego commita

git revert <commit-ish>

Reset: Odrzuć commity, zalecane dla prywatnej gałęzi

git reset <commit-ish>

Zmień kolejność poprzedniej wiadomości commita

git commit -v --amend

Zobacz historię zatwierdzeń tylko dla bieżącej gałęzi

git cherry -v master

Zmień autora.

git commit --amend --author='Author Name <email@address.com>'

Resetuj autora po zmianie autora w global config.

git commit --amend --reset-author --no-edit

Zmiana zdalnego adresu URL

git remote set-url origin <URL>

Uzyskaj listę wszystkich zdalnych referencji

git remote

Alternatywnie:

git remote show

Uzyskaj listę wszystkich lokalnych i zdalnych gałęzi

git branch -a

Uzyskaj tylko zdalne gałęzie

git branch -r

Śledź części zmienionego pliku zamiast całego pliku

git add -p

Uzyskaj ukończenie git bash

curl -L http://git.io/vfhol > ~/.git-completion.bash && echo '[ -f ~/.git-completion.bash ] && . ~/.git-completion.bash' >> ~/.bashrc

Co zmieniło się od dwóch tygodni?

git log --no-merges --raw --since='2 weeks ago'

Alternatywnie:

git whatchanged --since='2 weeks ago'

Zobacz wszystkie zatwierdzenia dokonane od czasu forkowania z mastera

git log --no-merges --stat --reverse master..

Wybierz zatwierdzenia między gałęziami za pomocą cherry-pick

git checkout <branch-name> && git cherry-pick <commit-ish>

Znajdź gałęzie zawierające commit-hash

git branch -a --contains <commit-ish>

Alternatywnie:

git branch --contains <commit-ish>

Aliasy Gita

git config --global alias.<handle> <command> 
git config --global alias.st status

Zapisywanie bieżącego stanu śledzonych plików bez zatwierdzania

git stash

Alternatywnie:

git stash save

Zapisywanie aktualnego stanu zmian unstaged do śledzonych plików

git stash -k

Alternatywnie:

git stash --keep-index
git stash save --keep-index

Zapisywanie bieżącego stanu, w tym nieśledzonych plików

git stash -u

Alternatywnie:

git stash save -u
git stash save --include-untracked

Zapisywanie aktualnego stanu z komunikatem

git stash save <message>

Zapisywanie bieżącego stanu wszystkich plików (ignorowanych, nieśledzonych i śledzonych)

git stash -a

Alternatywnie:

git stash --all
git stash save --all

Pokaż listę wszystkich zapisanych stashes

git stash list

Zastosuj dowolony stash bez usuwania z listy stashed

git stash apply <stash@{n}>

Zastosuj ostatni stan stashed i usuń go z listy stashed

git stash pop

Alternatywnie:

git stash apply stash@{0} && git stash drop stash@{0}

Usuń wszystkie przechowywane stashes

git stash clear

Alternatywnie:

git stash drop <stash@{n}>

Weź pojedynczy plik z pliku stash

git checkout <stash@{n}> -- <file_path>

Alternatywnie:

git checkout stash@{0} -- <file_path>

Pokaż wszystkie śledzone pliki

git ls-files -t

Pokaż wszystkie nieśledzone pliki

git ls-files --others

Pokaż wszystkie zignorowane pliki

git ls-files --others -i --exclude-standard

Utwórz nowe drzewo robocze z repozytorium (git 2.5)

git worktree add -b <branch-name> <path> <start-point>

Utwórz nowe drzewo robocze ze stanu HEAD

git worktree add --detach <path> HEAD

Przestań śledzić pliki bez usuwania

git rm --cached <file_path>

Alternatywnie:

git rm --cached -r <directory_path>

Przed usunięciem nieśledzonych plików / katalogu, wykonaj próbę, aby uzyskać listę tych plików / katalogów

git clean -n

Wymuś usunięcie nieśledzonych plików

git clean -f

Wymuś usunięcie nieśledzonego katalogu

git clean -f -d

Zaktualizuj wszystkie submoduły

git submodule foreach git pull

Alternatywnie:

git submodule update --init --recursive
git submodule update --remote

Pokaż wszystkie zatwierdzenia w bieżącym branchu, które mają zostać zmergowane do mastera

git cherry -v master

Alternatywnie:

git cherry -v master <branch-to-be-merged>

Zmień nazwę brancha

git branch -m <new-branch-name>

Alternatywnie:

git branch -m [<old-branch-name>] <new-branch-name>

Rebase 'feature' do 'master' i merguj to do master

git rebase master feature && git checkout master && git merge -

Zarchiwizuj branch master

git archive master --format=zip --output=master.zip

Zmodyfikuj poprzednie zatwierdzenie bez modyfikowania komunikatu zatwierdzenia

git add --all && git commit --amend --no-edit

Czyści odniesienia do zdalnych gałęzi, które zostały usunięte na zdalnym.

git fetch -p

Alternatywnie:

git remote prune origin

Pobierz skrót zatwierdzenia z początkowej wersji.

 git rev-list --reverse HEAD | head -1

Alternatywnie:

git rev-list --max-parents=0 HEAD
git log --pretty=oneline | tail -1 | cut -c 1-40
git log --pretty=oneline --reverse | head -1 | cut -c 1-40

Wizualizuj drzewo wersji.

git log --pretty=oneline --graph --decorate --all

Alternatywnie:

gitk --all
git log --graph --pretty=format:'%C(auto) %h | %s | %an | %ar%d'

Wizualizuj drzewo, w tym zatwierdzenia, do których odwołuje się tylko dziennik rejestrów

git log --graph --decorate --oneline $(git rev-list --walk-reflogs --all)

Wdrażanie podfolderu śledzonego przez git do gh-pages

git subtree push --prefix subfolder_name origin gh-pages

Dodanie projektu do repozytorium za pomocą poddrzewa

git subtree add --prefix=<directory_name>/<project_name> --squash git@github.com:<username>/<project_name>.git master

Pobierz najnowsze zmiany w repozytorium dla połączonego projektu za pomocą poddrzewa

git subtree pull --prefix=<directory_name>/<project_name> --squash git@github.com:<username>/<project_name>.git master

Wyeksportuj gałąź z historią do pliku.

git bundle create <file> <branch-name>

Importuj z pakietu

git clone repo.bundle <repo-dir> -b <branch-name>

Uzyskaj nazwę bieżącego brancha.

git rev-parse --abbrev-ref HEAD

Zignoruj jeden plik przy zatwierdzaniu (np. Changelog).

git update-index --assume-unchanged Changelog; git commit -a; git update-index --no-assume-unchanged Changelog

Stashuj zmiany przed rebasing'iem

git rebase --autostash

Pobierz pull request według identyfikatora do lokalnego brancha

git fetch origin pull/<id>/head:<branch-name>

Alternatywnie:

git pull origin pull/<id>/head:<branch-name>

Pokaż najnowszy tag w bieżącym branchu.

git describe --tags --abbrev=0

Pokaż inline word diff.

git diff --word-diff

Pokaż zmiany używając narzędzi common diff.

git difftool [-t <tool>] <commit1> <commit2> <path>

Nie rozważaj zmian w śledzonym pliku.

git update-index --assume-unchanged <file_name>

Cofnij assume-unchanged.

git update-index --no-assume-unchanged <file_name>

Wyczyść pliki z .gitignore.

git clean -X -f

Przywróć usunięty plik.

git checkout <deleting_commit>^ -- <file_path>

Przywróć plik do określonego commit-hash

git checkout <commit-ish> -- <file_path>

Zawsze rebase zamiast merge na pull.

git config --global pull.rebase true

Alternatywnie:

#git < 1.7.9
git config --global branch.autosetuprebase always

Wyświetl wszystkie aliasy i konfiguracje.

git config --list

Uwzględnij wielkość liter w git.

git config --global core.ignorecase false

Dodaj niestandardowe edytory.

git config --global core.editor '$EDITOR'

Automatyczne poprawianie literówek.

git config --global help.autocorrect 1

Sprawdź, czy zmiana była częścią wydania.

git name-rev --name-only <SHA-1>

Dry run. (dowolne polecenie obsługujące flagę dry-run powinno zrobić.)

git clean -fd --dry-run

Oznacza twoje zatwierdzenie jako poprawkę poprzedniego zatwierdzenia.

git commit --fixup <SHA-1>

Squash fixup commits normal commits.

git rebase -i --autosquash

Pomiń staging area podczas commitowania.

git commit --only <file_path>

Interaktywny staging.

git add -i

Lista ignorowanych plików.

git check-ignore *

Status zignorowanych plików.

git status --ignored

Commity w Branch1 które nie są w Branch2

git log Branch1 ^Branch2

Wyświetl listę n ostatnich commitów

git log -<n>

Alternatywnie:

git log -n <n>

Ponownie użyj recorded resolution, record and reuse previous conflicts resolutions.

git config --global rerere.enabled 1

Otwórz wszystkie skonfliktowane pliki w edytorze.

git diff --name-only | uniq | xargs $EDITOR

Policz wypakowaną liczbę obiektów i ich zużycie dysku.

git count-objects --human-readable

Wyczyść wszystkie nieosiągalne obiekty z bazy danych obiektów.

git gc --prune=now --aggressive

Natychmiast przeglądaj działające repozytorium w gitweb.

git instaweb [--local] [--httpd=<httpd>] [--port=<port>] [--browser=<browser>]

Wyświetl podpisy GPG w dzienniku zatwierdzeń

git log --show-signature

Usuń wpis w globalnej konfiguracji.

git config --global --unset <entry-name>

Checkout nowego brancha bez historii

git checkout --orphan <branch_name>

Wyodrębnij plik z innej gałęzi.

git show <branch_name>:<file_name>

Wymień tylko root i merge commits.

git log --first-parent

Zmień poprzednie dwa zatwierdzenia za pomocą interaktywnego rebase.

git rebase --interactive HEAD~2

Wymień wszystkie gałęzie, których praca jest w toku (WIP)

git checkout master && git branch --no-merged

Znajdź nieczyste korzystając z wyszukiwania binarnego

git bisect start                    # Search start 
git bisect bad                      # Set point to bad commit 
git bisect good v2.6.13-rc2         # Set point to good commit|tag 
git bisect bad                      # Say current state is bad 
git bisect good                     # Say current state is good 
git bisect reset                    # Finish search 

Bypass pre-commit and commit-msg githooks

git commit --no-verify

Lista zatwierdzeń i zmian w określonym pliku (nawet poprzez zmianę nazwy)

git log --follow -p -- <file_path>

Klonuj pojedynczy branch

git clone -b <branch-name> --single-branch https://github.com/user/repo.git

Utwórz i zmień nowy branch

git checkout -b <branch-name>

Alternatywnie:

git branch <branch-name> && git checkout <branch-name>

Ignoruj tryb zmiany plików na commitach

git config core.fileMode false

Wyłącz git colored terminal output

git config --global color.ui false

Określone ustawienia kolorów

git config --global <specific command e.g branch, diff> <true, false or always>

Pokaż wszystkie lokalne branche uporządkowane według ostatnich commitów

git for-each-ref --sort=-committerdate --format='%(refname:short)' refs/heads/

Znajdź wiersze pasujące do wzorca (wyrażenia regularnego lub ciągu) w śledzonych plikach

git grep --heading --line-number 'foo bar'

Sklonuj płytką kopię repozytorium

git clone https://github.com/user/repo.git --depth 1

Wyszukaj Commit log we wszystkich branchach dla podanego tekstu

git log --all --grep='<given-text>'

Uzyskaj pierwszy commit w branchu (z master)

git log --oneline master..<branch-name> | tail -1

Alternatywnie:

git log --reverse master..<branch-name> | head -6

Unstaging Staged file

git reset HEAD <file-name>

Wymuś wypchnięcie do zdalnego repozytorium

git push -f <remote-name> <branch-name>

Dodawanie nazwy zdalnej

git remote add <remote-nickname> <remote-url>

Wyświetl listę wszystkich aktualnie skonfigurowanych zdalnych

git remote -v

Pokaż autora, czas i ostatnią wersję dokonaną w każdej linii danego pliku

git blame <file-name>

Grupuj commity według autorów i tytułów

git shortlog

Wymuś pusha, ale nadal upewnij się, że nie nadpisujesz pracy innych

git push --force-with-lease <remote-name> <branch-name>

Pokaż, ile wierszy ma współautor

git log --author='_Your_Name_Here_' --pretty=tformat: --numstat | gawk '{ add += <!-- @doxie.inject start -->; subs += <!-- @doxie.inject end -->; loc += <!-- @doxie.inject start --> - <!-- @doxie.inject end --> } END { printf "added lines: %s removed lines: %s total lines: %s
", add, subs, loc }' -

Alternatywnie:

git log --author='_Your_Name_Here_' --pretty=tformat: --numstat | awk '{ add += <!-- @doxie.inject start -->; subs += <!-- @doxie.inject end -->; loc += <!-- @doxie.inject start --> - <!-- @doxie.inject end --> } END { printf "added lines: %s, removed lines: %s, total lines: %s
", add, subs, loc }' - # on Mac OSX

Cofnij: Cofnięcie całego merge

git revert -m 1 <commit-ish>

Liczba commitów w branchu

git rev-list --count <branch-name>

Alias: git undo - cofnij

git config --global alias.undo '!f() { git reset --hard $(git rev-parse --abbrev-ref HEAD)@{${1-1}}; }; f'

Dodaj notatkę obiektu

git notes add -m 'Note on the previous commit....'

Pokaż wszystkie git-notes

git log --show-notes='*'

Zastosuj commit z innego repozytorium

git --git-dir=<source-dir>/.git format-patch -k -1 --stdout <SHA1> | git am -3 -k

Specific fetch reference

git fetch origin master:refs/remotes/origin/mymaster

Znajdź wspólnego przodka dwóch gałęzi

git merge-base <branch-name> <other-branch-name>

Wyświetl unpushed git commits

git log --branches --not --remotes

Alternatywnie:

git log @{u}..
git cherry -v

Dodaj wszystko, ale bez zmiany białych znaków

git diff --ignore-all-space | git apply --cached

Edytuj [local/global] git config

git config [--global] --edit

blame on certain range

git blame -L <start>,<end>

Pokaż zmienną logiczną Git.

git var -l | <variable>

Preformatted patch file.

git format-patch -M upstream..topic

Uzyskaj nazwę repozytorium.

git rev-parse --show-toplevel

logi między zakresem dat

git log --since='FEB 1 2017' --until='FEB 14 2017'

Wyklucz autora z logów

git log --perl-regexp --author='^((?!excluded-author-regex).*)

Generuj podsumowanie oczekujących zmian

git request-pull v1.0 https://git.ko.xz/project master:for-linus

Lista referencji w zdalnym repozytorium

git ls-remote git://git.kernel.org/pub/scm/git/git.git

Utwórz kopię zapasową nieśledzonych plików.

git ls-files --others -i --exclude-standard | xargs zip untracked.zip

Wyświetl wszystkie aliasy git

git config -l | grep alias | sed 's/^alias\.//g'

Alternatywnie:

git config -l | grep alias | cut -d '.' -f 2

Pokaż git status short

git status --short --branch

Sprawdź commit sprzed dnia

git checkout master@{yesterday}

Popchnij nowy branch lokalny do zdalnego repozytorium i śledź

git push -u origin <branch_name>

Zmień branch base

git rebase --onto <new_base> <old_base>

Użyj SSH zamiast HTTPs dla remotes

git config --global url.'git@github.com:'.insteadOf 'https://github.com/'

Zaktualizuj submoduł do najnowszego commita

cd <path-to-submodule>
git pull origin <branch>
cd <root-of-your-main-project>
git add <path-to-submodule>
git commit -m "submodule updated"

Zapobiegaj automatycznemu zastępowaniu LF przez CRLF

git config --global core.autocrlf false
<!-- Don’t remove or change the comment below – that can break automatic updates. More info at <http://npm.im/doxie.inject>. --> <!-- @doxie.inject end -->