- Konfiguracja
- Pliki Konfiguracyjne
- Tworzenie
- Zmiany Lokalne
- Wyszukiwanie
- Historia Commitów
- Gałęzie & Tagi
- Uaktualnij & Opublikuj
- Połącz & Rebase
- Cofnij
- Git Flow
$ git config --list
$ git config --local --list
$ git config --global --list
$ git config --system --list
$ git config --global user.name “[imię nazwisko]”
$ git config --global user.email “[poprawny-email]”
$ git config --global color.ui auto
$ git config --global core.editor vi
<repo>/.git/config
~/.gitconfig
/etc/gitconfig
Istnieją dwa sposoby:
Przez SSH
$ git clone ssh://[email protected]/repo.git
Przez HTTP
$ git clone http://domena.com/nazwa/repo.git
$ git init
$ git init <ścieżka>
$ git status
$ git diff
$ git diff <plik>
$ git add .
$ git add -p <plik>
$ git add <nazwapliku1> <nazwapliku2>
$ git commit -a
$ git commit
$ git commit -m 'twoja wiadomość'
$ git commit -am 'twoja wiadomość'
$ git commit --date="`date --date='n dzień temu'`" -am "<twoja wiadomość>"
Nie modyfikuj opublikowanych commitów!
$ git commit -a --amend
Nie modyfikuj opublikowanych commitów!
$ git commit --amend --no-edit
GIT_COMMITTER_DATE="date" git commit --amend
$ git commit --amend --date="date"
$ git stash
$ git checkout gałąź2
$ git stash pop
$ git stash apply
- {numer_stashu} można uzyskać poprzez
git stash list
$ git stash apply stash@{numer_stashu}
$ git stash drop
$ git grep "Cześć"
$ git grep "Cześć" v2.5
$ git log -S 'słowo kluczowe'
$ git log -S 'słowo kluczowe' --pickaxe-regex
Wyświetl wszystkie commity, zaczynając od najnowszego (wyświetli hash, informacje o autorze, datę commitu i tytuł commitu):
$ git log
$ git log --oneline
$ git log --author="użytkownik"
$ git log -p <plik>
$ git log --oneline <origin/master>..<remote/master> --left-right
$ git blame <plik>
$ git reflog show
$ git reflog delete
Zmień nazwę z Index.txt na Index.html
$ git mv Index.txt Index.html
$ git branch
$ git branch -a
$ git branch -r
$ git checkout <gałąź>
$ git checkout <gałąź> -- <nazwapliku>
$ git checkout -b <gałąź>
$ git checkout -
$ git checkout -b <nowa_gałąź> <istniejąca_gałąź>
$ git checkout <hash-commitu> -b <nazwa_nowej_gałęzi>
$ git branch <nowa-gałąź>
$ git branch --track <nowa-gałąź> <gałąź-zdalna>
$ git branch -d <gałąź>
$ git branch -m <nowa_nazwa_gałęzi>
Utracisz niepołączone zmiany!
$ git branch -D <branch>
$ git tag <nazwa-tagu>
$ git tag -a <nazwa-tagu>
$ git tag <nazwa-tagu> -am 'twoja wiadomość'
$ git tag
Wyświetl wszystkie tagi wraz z ich wiadomościami (wiadomość tagu lub wiadomość commitu jeśli tag nie ma wiadomości):
$ git tag -n
$ git remote -v
$ git remote show <repozytorium>
$ git remote add <repozytorium> <url>
$ git remote rename <repozytorium> <nowe_repozytorium>
$ git remote rm <repozytorium>
Uwaga: git remote rm nie usuwa zdalnego repozytorium z serwera. Po prostu usuwa zdalne repozytorium i jego referencje z lokalnego repozytorium.
$ git fetch <repozytorium>
$ git remote pull <repozytorium> <url>
$ git pull origin master
$ git pull --rebase <repozytorium> <gałąź>
$ git push remote <repozytorium> <gałąź>
$ git push <repozytorium> :<gałąź> (od Git v1.5.0)
lub
$ git push <repozytorium> --delete <gałąź> (od Git v1.7.0)
$ git push --tags
$ git config --global merge.tool meld
$ git mergetool
$ git merge <gałąź>
$ git branch --merged
Nie rebase'uj opublikowanych commitów!
$ git rebase <gałąź>
$ git rebase --abort
$ git rebase --continue
Użyj swojego edytora do ręcznego rozwiązywania konfliktów i (po rozwiązaniu) oznacz plik jako rozwiązany:
$ git add <rozwiązany-plik>
$ git rm <rozwiązany-plik>
$ git rebase -i <commit-just-before-first>
Teraz zastąp to,
pick <commit_id>
pick <commit_id2>
pick <commit_id3>
tym,
pick <commit_id>
squash <commit_id2>
squash <commit_id3>
$ git reset --hard HEAD
$ git reset HEAD
$ git checkout HEAD <plik>
$ git revert <commit>
$ git reset --hard <commit>
$ git reset --hard <repozytorium/gałąź> np., upstream/master, origin/my-feature
Zresetuj wskaźnik HEAD do poprzedniego commitu i zachowaj wszystkie zmiany jako zmiany niestage'owane:
$ git reset <commit>
$ git reset --keep <commit>
$ git rm -r --cached .
$ git add .
$ git commit -m "remove xyz file"
Poprawione Git-flow
Musisz mieć działającą instalację git jako warunek wstępny. Git flow działa na OSX, Linuxie i Windowsie.
$ brew install git-flow-avh
$ port install git-flow
$ sudo apt-get install git-flow
$ wget -q -O - --no-check-certificate https://raw.githubusercontent.com/petervanderdoes/gitflow/develop/contrib/gitflow-installer.sh install <state> | bash
Git flow musi zostać zainicjowany, aby dostosować konfigurację projektu do własnych potrzeb. Zacznij używać git-flow inicjalizując go wewnątrz istniejącego repozytorium git:
Będziesz musiał odpowiedzieć na kilka pytań dotyczących konwencji nazewnictwa dla twoich gałęzi. Zaleca się używanie wartości domyślnych.
git flow init
lub
git flow init -d
Twórz nowe funkcjonalności dla nadchodzących wydań. Zazwyczaj istnieją tylko w repozytoriach deweloperów.
git flow feature start MOJAFUNKCJA
git flow feature finish MOJAFUNKCJA
Tworzysz funkcjonalność w ramach współpracy? Opublikuj funkcjonalność na zdalnym serwerze, aby mogli z niej korzystać inni użytkownicy.
git flow feature publish MOJAFUNKCJA
git flow feature pull origin MOJAFUNKCJA
git flow feature track MOJAFUNKCJA
Wspiera przygotowanie nowego wydania produkcyjnego. Umożliwia poprawki drobnych błędów i przygotowanie meta-danych do wydania.
Aby rozpocząć wydanie, użyj polecenia git flow release. Tworzy ono gałąź wydania utworzoną z gałęzi 'develop'. Opcjonalnie możesz podać hash SHA-1 commitu [BASE], od którego rozpocznie się wydanie. Commit musi znajdować się w gałęzi 'develop'.
git flow release start RELEASE [BASE]
Rozsądnie jest opublikować gałąź release po jej utworzeniu, aby umożliwić commitowanie wydania innym developerom. Zrób to podobnie do publikowania funkcji za pomocą polecenia:
git flow release publish RELEASE
git flow release finish RELEASE
Hotfiksy powstają w wyniku konieczności natychmiastowego działania w przypadku niepożądanego stanu wersji produkcyjnej. Mogą być odgałęzione od odpowiedniego znacznika na gałęzi głównej, która oznacza wersję produkcyjną.
$ git flow hotfix start VERSION [BASENAME]
Argument "version" oznacza nazwę nowego wydania hotfiksa. Opcjonalnie możesz określić nazwę bazową, od której chcesz rozpocząć.
Po ukończeniu hotfiksa zostaje on scalony z powrotem do wersji rozwojowej i głównej. Dodatkowo główne złączenie jest oznaczane wersją hotfiksa.
git flow hotfix finish VERSION