-
-
Save starikovs/9390657 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- install git --- | |
git ---version (in Debian git is installed) | |
dpkg -s git | grep Status | |
dpkg -s git | |
apt-cache pkgnames git | |
apt-get install git | |
--- bare repo on server --- | |
(bare repositories shouldn’t have a working directory) | |
(at server) | |
ssh user@host | |
git init --bare /path/to/repo.git (.git extension to indicate it's a bare repo) | |
(at client) | |
git clone ssh://user@host/path/to/repo.git | |
(git automatically adds a shortcut called "origin" that points back to the “parent” repository, | |
under the assumption that you'll want to interact with it further on down the road) | |
origin - is the remote connection to the central repository created after "clone" | |
--- new repo --- | |
git init | |
--- status, what changed --- | |
git status | |
git diff (changes befor add) | |
git diff --staged (changes between last commit and add) | |
git diff 2f34 2730 (diff between commits) | |
git diff --color (show colored diff) | |
git cherry -v origin/somebranch (show unpushed commits) | |
git cherry -v somebranch | |
--- ignore --- | |
.gitignore | |
.git/info/exclude | |
--- new github repo -- | |
touch README.md | |
git init | |
git add README.md | |
git commit -m "first commit" | |
git commit -v (open editor and show diff before commit) | |
git commit -a -m "comment" | |
# creates a remote named "origin" pointing at your GitHub repository | |
git remote add origin https://github.com/starikovs/conf.git | |
# sends your commits in the "master" branch to GitHub | |
git push -u origin master (push and set upstream, he same way as "git branch --set-upstream" does) | |
--- add --- | |
http://stackoverflow.com/questions/572549/difference-between-git-add-a-and-git-add | |
git add -A (stages All) | |
git add . (stages new and modified, without deleted) | |
git add -u (stages modified and deleted, without new) | |
--- remove files --- | |
rm file | |
git rm file | |
OR | |
git rm file (without rm) | |
git rm -f file (if file has been indexed) | |
git rm \*~ | |
git rm -r dir/ (remove recursively) | |
git rm -rf dir/ (remove recusively even if there're local modifications) | |
--- move (rename) file --- | |
git mv file_from file_to | |
(the same as above) | |
mv README.txt README | |
git rm README.txt | |
git add README | |
(git detects moving automatically) | |
--- push existing repo --- | |
git remote add origin https://github.com/starikovs/conf.git | |
git push -u origin master | |
--- to unstage, before commit recently added files --- | |
git reset HEAD README.md (when it's commited already) | |
git rm --cached README.md (remove file from git but saves on disk) | |
--- discard changes in working directory --- | |
git checkout -- README.md | |
git checkout -- . (for all unstaged files use) | |
--- change last commit --- | |
git commit --amend | |
git commit --amend -m 'Class that echoes "Hello, World!"' (change commit message) | |
git commit -m 'initial commit' | |
git add forgotten_file | |
git commit --amend | |
(!!don't amend after push) | |
(to undo amend:) | |
git reset --soft HEAD@{1} (reset to previous commit before amend) | |
git commit -C HEAD@{1} (new commit with the same message) | |
--- clone github repo --- | |
git clone https://github.com/starikovs/conf.git | |
git clone https://github.com/starikovs/conf.git ./ | |
--- history --- | |
git log | |
git log -p (diff) | |
git log -p -2 | |
git log -p -1 --stat (get additional stat - files updated, etc) | |
git log -3 --pretty=oneline (short, full, fuller) | |
git log -2 --pretty=format:"%h - %an, %ar : %s" (%an - author name, %ar - relative author date) | |
git log --pretty=format:"%h %s" --graph (%h - short hash, %s - comment) | |
git log --since=2.weeks = git log --after=2.weeks | |
git log --until=2.weeks = git log --before=2.weeks | |
git log -2 --author="Vacheslav Starikov" (filter by author) | |
git log -2 --grep="bash" (filter by commit message) | |
git log -2 --author="Vacheslav Starikov" --grep="bash" (OR) | |
git log -2 --author="Vacheslav Starikov" --grep="bash" --all-match (AND) | |
git show 36b314c (--stat - additional stat, -p - diffs) | |
git log -- filepath | |
git show commitId (like 36b314c for example) -- filepath (show a diff on a specific file with a specific commit) | |
git show --pretty="format:" --name-only bd61ad98 (show changed files for commit) | |
git diff firstCommitId secondCommitId | |
git diff firstCommitId secondCommitId -- filepath | |
--- reset -- | |
git reset --hard 82ba34 | |
--- remotes repos --- | |
git remote (list of short names of remote repos) | |
origin - default name | |
git remove -v (show url) | |
git remote add [shortname] [url] (add remote repo) | |
git remote add pb git://github.com/paulboone/ticgit.git | |
git fetch pb | |
git fetch [remote-name] (get data from remote repo) | |
git fetch origin (get data but doesn't merge, merge manually) | |
git fetch -v --progress origin develop:remotes/origin/develop | |
git pull (get data from remote branch (fetch) and merge automatically (merge)) | |
git push [url] [branch] | |
git push origin master (origin - remote connection, master - push local master -> origin's master) | |
git clone - create "origin" and "master" automatically | |
git remote show origin (more info about origin) | |
git remote rename pb paul (rename link shortname) | |
git remote rm paul (remove link) | |
--- tags --- | |
v1.0, v2.0 etc. | |
git tag (show tags) | |
git tag -l 'v1.4.2.*' (show all 1.4.2.*) | |
git tag -a v1.4 -m 'my version 1.4' (create tag of "-a" type) | |
git show v1.4 (show tagged commit and tag info) | |
git tag v1.4.1 (create lightweight tag, don't pass "-a", "-s" or "-m") | |
git tag -a v1.2 9fceb02 (tag custom commit, 9fceb02 - begining of hash) | |
git push v1.4 (push tag, tags aren't pushed with branch push) | |
git push --tags (push all tags) | |
git push origin --tags | |
git tag -a 0.1 -m "Initial public release" master | |
git push --tags | |
--- branches --- | |
good info about branches http://nvie.com/posts/a-successful-git-branching-model/ | |
master - default branch name and default branch | |
git branch test - new branch but HEAD still points to "master" | |
HEAD - pointer to current branch | |
git branch | |
git branch -a (local and remote) | |
git branch -r (only remote branches) | |
git remote show origin | |
git checkout test - switch to test branch, now HEAD points to branch "test" | |
git commit -a -m "commit to test" | |
git checkout master - return to "master" | |
git commit -a -m "commit to master" | |
git checkout -b hotfix - create new branch "iss53" and switch to it | |
vim index.html | |
git commit -a -m "hotfix!" | |
git checkout master | |
git merge hotfix - merge "hotfix" branch to "master" | |
"Fast forward" | |
git branch -d hotfix - delete "hotfix" branch | |
git checkout iss53 | |
vim index.html | |
git commit -a -m "commit to iss53" | |
git checkout master | |
git merge iss53 | |
"Merge made by recursive" | |
git merge --no-ff helloworld (create merge commit, no fast forward) | |
git branch -d helloworld (delete branch) | |
git merge --no-ff --no-commit myfeaturebranch | |
git branch (show branches) | |
git branch -v (show branches and last commits) | |
git branch --merged, git branch --no-mergred | |
git push origin serverfix | |
git push origin serverfix:serverfix | |
git push origin serverfix:awesomebranch | |
git fetch origin (* [new branch] serverfix -> origin/serverfix) | |
git checkout -b serverfix origin/serverfix | |
git checkout --track origin/serverfix = git checkout -t origin/serverfix (create new branch & set up "upstream") | |
git checkout -b sf origin/serverfix | |
git checkout -b some-feature develop (base the feature branch on develop) | |
git push origin :serverfix ([deleted] serverfix) | |
http://stackoverflow.com/questions/1519006/git-how-to-create-remote-branch | |
git checkout origin/<branch-name> -b <branch-name> | |
git push -u <remote-name> <branch-name> | |
git branch -vv (show local branches and their tracking branches - upstream branchs) | |
git remote show origin (show local tracked branches) | |
git branch -m oldname newname (rename branch) | |
git branch -m newname (for current branch) | |
(delete branch on github) | |
http://stackoverflow.com/questions/2003505/how-do-i-delete-a-git-branch-both-locally-and-remotely | |
git push origin --delete <branchName> (As of Git v1.7.0, you can delete a remote branch using this) | |
git push origin :<branchName> (the same, which was added in Git v1.5.0) | |
(existing git branch track a remote branch, set upstream) | |
git branch --set-upstream branch-name origin/branch-name | |
--- squash merge --- | |
git merge --squash bugfix (this takes all commits from the bugfix branch, squash them into 1 commit and then merge it with your master branch) | |
git commit (without -m param to keep all commits' messages) | |
--- rebase --- | |
git checkout feature | |
git rebase master | |
(when resolving conflict with rebase:) | |
git rebase --abort (abort rebase) | |
(resolve, then:) | |
git add... | |
git rebase --continue (continue rebase after resolving conflicts) | |
git rebase --skip (skip commit) | |
(pull/push with rebase) | |
git pull --rebase origin master | |
git push origin master | |
rebase не является надстройкой над merge, он является надстройкой (а точнее автоматизацией) cherry-pick-ов | |
--- stash --- | |
git stash | |
git stash save doing crazy things (stash with comment "doing crazy things") | |
git stash list | |
git stash apply | |
git stash apply --index | |
git stash drop stash@{0} | |
git stash pop | |
git stash show -p stash@{0} | git apply -R (unapply) | |
git stash branch testchanges (create branch from stash) | |
git stash show (show files) | |
git stash show -p (show patch - changes) | |
git stash show -p stash@{0} (show patch for stash@{0}) | |
--- config --- | |
git config --global user.name "Billy Everyteen" | |
git config --global user.email [email protected] | |
git config --global core.editor vim | |
git config --global merge.tool vimdiff | |
git config --list (check) | |
git config --global user.name | |
git config --global user.email | |
git config --global core.editor | |
git config --global merge.tool | |
/etc/gitconfig -> git config --system | |
~/.gitconfig -> git config --global | |
.git/config -> git config (for repo by default, --local) | |
--- help --- | |
git help <command> | |
git <command> --help | |
man git-<command> | |
--- windows putty key --- | |
1. Open PuTTY Key Generator | |
2. Load *.ppk | |
3. Conversion->Export OpenSSH key | |
4. Save it to "~\.ssh\id_rsa" and to "C:\Program Files (x86)\Git\.ssh\id_rsa" | |
5. Add "C:\Program Files (x86)\Git\bin\" and "C:\Program Files (x86)\Git\cmd\" to PATH | |
6. Test ssh [email protected], which shows what repos are allowed to write |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment