Git and Git Flow Cheat Sheet
Other Available Languages:- Arabic Git Cheat Sheet
- Chinese Git Cheat Sheet
- Hindi Git Cheat Sheet
- Turkish Git Cheat Sheet
- Spanish Git Cheat Sheet
- Greek Git Cheat Sheet
Git cheat sheet saves you from learning all the commands by heart. Be free to contribute, update the grammar mistakes. You are also free to add your language file.
Git Cheat Sheet EnglishIndex
SetupShow current configuration:Show repository configuration:$ git config --local --list Show global configuration:$ git config --global --list Show system configuration:$ git config --system --list Set a name that is identifiable for credit when review version history:$ git config --global user.name “[firstname lastname]” Set an email address that will be associated with each history marker:$ git config --global user.email “[valid-email]” Set automatic command line coloring for Git for easy reviewing:$ git config --global color.ui auto Set global editor for commit$ git config --global core.editor vi
Configuration FilesRepository specific configuration file [--local]:User-specific configuration file [--global]:System-wide configuration file [--system]:
CreateClone an existing repository:There are two ways: Via SSH Via HTTP $ git clone http://domain.com/user/repo.git Create a new local repository in the current directory:Create a new local repository in a specific directory:
Local ChangesChanges in working directory:Changes to tracked files:See changes/difference of a specific file:Add all current changes to the next commit:Add some changes in <file> to the next commit:Commit all local changes in tracked files:Commit previously staged changes:Commit with message:$ git commit -m 'message here' Commit skipping the staging area and adding message:$ git commit -am 'message here' Commit to some previous date:$ git commit --date="`date --date='n day ago'`" -am "<Commit Message Here>" Change last commit:
Don't amend published commits! Amend with last commit but use the previous commit log messageDon't amend published commits! $ git commit --amend --no-edit Change committer date of last commit:GIT_COMMITTER_DATE="date" git commit --amend Change Author date of last commit:$ git commit --amend --date="date" Move uncommitted changes from current branch to some other branch:
$ git stash$ git checkout branch2$ git stash pop Restore stashed changes back to current branch:Restore particular stash back to current branch:- {stash_number} can be obtained from
git stash list
$ git stash apply stash@{stash_number} Remove the last set of stashed changes:
SearchA text search on all files in the directory:In any version of a text search:
Commit HistoryShow all commits, starting with newest (it'll show the hash, author information, date of commit and title of the commit):Show all the commits(it'll show just the commit hash and the commit message):Show all commits of a specific user:$ git log --author="username" Show changes over time for a specific file:Display commits that are present only in remote/branch in right side$ git log --oneline <origin/master>..<remote/master> --left-right Who changed, what and when in <file>:Show Reference log:Delete Reference log:
Move / RenameRename a file:Rename Index.txt to Index.html $ git mv Index.txt Index.html
Branches & TagsList all local branches:List local/remote branchesList all remote branches:Switch HEAD branch:Checkout single file from different branch$ git checkout <branch> -- <filename> Create and switch new branch:$ git checkout -b <branch> Create a new branch from an exiting branch and switch to new branch:$ git checkout -b <new_branch> <existing_branch> Checkout and create a new branch from existing commit$ git checkout <commit-hash> -b <new_branch_name> Create a new branch based on your current HEAD:$ git branch <new-branch> Create a new tracking branch based on a remote branch:$ git branch --track <new-branch> <remote-branch> Delete a local branch:Rename current branch to new branch name$ git branch -m <new_branch_name> Force delete a local branch:You will lose unmerged changes! Mark HEAD with a tag:Mark HEAD with a tag and open the editor to include a message:Mark HEAD with a tag that includes a message:$ git tag <tag-name> -am 'message here' List all tags:List all tags with their messages (tag message or commit message if tag has no message):
Update & PublishList all current configured remotes:Show information about a remote:$ git remote show <remote> Add new remote repository, named <remote>:$ git remote add <remote> <url> Rename a remote repository, from <remote> to <new_remote>:$ git remote rename <remote> <new_remote> Remove a remote:Note: git remote rm does not delete the remote repository from the server. It simply removes the remote and its references from your local repository. Download all changes from <remote>, but don't integrate into HEAD:Download changes and directly merge/integrate into HEAD:$ git remote pull <remote> <url> Get all changes from HEAD to local repository:Get all changes from HEAD to local repository without a merge:$ git pull --rebase <remote> <branch> Publish local changes on a remote:$ git push remote <remote> <branch> Delete a branch on the remote:$ git push <remote> :<branch> (since Git v1.5.0) OR $ git push <remote> --delete <branch> (since Git v1.7.0) Publish your tags:
Configure the merge tool globally to meld (editor)$ git config --global merge.tool meld Use your configured merge tool to solve conflicts:Merge & RebaseMerge branch into your current HEAD:Rebase your current HEAD onto <branch>:
Don't rebase published commit! Abort a rebase:Continue a rebase after resolving conflicts:Use your editor to manually solve conflicts and (after resolving) mark file as resolved:$ git add <resolved-file> Squashing commits:$ git rebase -i <commit-just-before-first> Now replace this, pick <commit_id>pick <commit_id2>pick <commit_id3> to this, pick <commit_id>squash <commit_id2>squash <commit_id3>
UndoDiscard all local changes in your working directory:Get all the files out of the staging area(i.e. undo the last git add ):Discard local changes in a specific file:$ git checkout HEAD <file> Revert a commit (by producing a new commit with contrary changes):Reset your HEAD pointer to a previous commit and discard all changes since then:$ git reset --hard <commit> Reset your HEAD pointer to a remote branch current state.$ git reset --hard <remote/branch> e.g., upstream/master, origin/my-feature Reset your HEAD pointer to a previous commit and preserve all changes as unstaged changes:Reset your HEAD pointer to a previous commit and preserve uncommitted local changes:$ git reset --keep <commit> Remove files that were accidentally committed before they were added to .gitignore$ git rm -r --cached .$ git add .$ git commit -m "remove xyz file"
Git-FlowImproved Git-flow Index
SetupYou need a working git installation as prerequisite. Git flow works on OSX, Linux and Windows.OSX Homebrew:$ brew install git-flow-avh OSX Macports:Linux (Debian-based):$ sudo apt-get install git-flow Windows (Cygwin):You need wget and util-linux to install git-flow.$ wget -q -O - --no-check-certificate https://raw.githubusercontent.com/petervanderdoes/gitflow/develop/contrib/gitflow-installer.sh install <state> | bash
Getting StartedGit flow needs to be initialized in order to customize your project setup. Start using git-flow by initializing it inside an existing git repository:Initialize:You'll have to answer a few questions regarding the naming conventions for your branches. It's recommended to use the default values.OR To use default
FeaturesDevelop new features for upcoming releases. Typically exist in developers repos only.Start a new feature:This action creates a new feature branch based on 'develop' and switches to it.git flow feature start MYFEATURE Finish up a feature:Finish the development of a feature. This action performs the following:1) Merged MYFEATURE into 'develop'.2) Removes the feature branch.3) Switches back to 'develop' branchgit flow feature finish MYFEATURE Publish a feature:Are you developing a feature in collaboration? Publish a feature to the remote server so it can be used by other users.git flow feature publish MYFEATURE Getting a published feature:Get a feature published by another user.git flow feature pull origin MYFEATURE Tracking a origin feature:You can track a feature on origin by usinggit flow feature track MYFEATURE
Make a ReleaseSupport preparation of a new production release. Allow for minor bug fixes and preparing meta-data for a releaseStart a release:To start a release, use the git flow release command. It creates a release branch created from the 'develop' branch. You can optionally supply a [BASE] commit sha-1 hash to start the release from. The commit must be on the 'develop' branch.git flow release start RELEASE [BASE] It's wise to publish the release branch after creating it to allow release commits by other developers. Do it similar to feature publishing with the command:git flow release publish RELEASE (You can track a remote release with the: git flow release track RELEASE command)Finish up a release:Finishing a release is one of the big steps in git branching. It performs several actions:1) Merges the release branch back into 'master'2) Tags the release with its name3) Back-merges the release into 'develop'4) Removes the release branchgit flow release finish RELEASE Don't forget to push your tags with git push --tags
HotfixesHotfixes arise from the necessity to act immediately upon an undesired state of a live production version. May be branched off from the corresponding tag on the master branch that marks the production version.Git flow hotfix start:Like the other git flow commands, a hotfix is started with$ git flow hotfix start VERSION [BASENAME] The version argument hereby marks the new hotfix release name. Optionally you can specify a basename to start from.Finish a hotfix:By finishing a hotfix it gets merged back into develop and master. Additionally the master merge is tagged with the hotfix versiongit flow hotfix finish VERSION
Commands
Git flow schema |
请发表评论