下面是我整理的常用 Git 命令清单。几个专用名词的译名如下。
Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库一、新建代码库# 在本地新建一个Git代码库$ git init 初始化一个Git库或 $ git init [project-name] 新建一个目录,将其初始化为Git代码库# 增加远程服务器端地址, origin代表设置远程服务器端别名,可以修改,默认设置为origin,在使用git init 创建本地Git代码库后,需要使用该语句绑定远程服务器url$ git remote add origin [url]# 从远程仓库克隆一个本地仓库 如果已有远程服务器并且有现有代码,则使用该语句$ git clone [url]二、 配置Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。# 显示当前的Git 配置$ git config --list#编辑Git配置文件git config -e [--global]#设置提交代码时的用户信息$ git config [--global] user.name '[name]'$ git config [--global] user.email '[email]'三、增加/删除文件到暂存区1、添加文件到暂存区$ git add [file1] [file2] ... # 添加指定文件到暂存区$ git add [dir] # 添加指定目录到暂存区,包括子目录$ git add . # 添加修改过的所有文件到暂存区2、删除工作区文件$ git rm [file1] [file2] ... # 删除工作区文件,并且将这次删除放入暂存区$ git rm --cache [file] #保留工作区文件,并且将这次删除放入暂存区3、修改文件名$ git mv [file-original] [file-renamed] # 改名文件,并且将这个改名放入暂存区四、 代码提交到本地仓库1、从暂存区提交到本地仓库$ git commit -m [message] # 提交暂存区到仓库区$ git commit -m [file1] [file2]... -m [message] #提交暂存区的指定文件到仓库区$ git commit --amend -m [message] # 使用一次新的commit,替代上一次提交,如果代码没有任何新变化,则用来 改写上一次commit的提交信息$ git commit --amend [file1] [file2] #重做上一次commit ,并包括指定文件的新变化五、分支1、查看分支$ git branch #列出所有本地分支$ git branch -r #列出所有远程分支$ git branch -a #列出所有本地分支和远程分支2、新建分支$ git branch [local-branch-name] #新建一个本地分支,但依然停留在当前分支上$ git checkout -b [local-branch-name] #新建一个本地分支,并切换到该分支$ git branch --track [local-branch-name] [remotename/remotebranch] 或 git checkout -b [local-branch-name][remote/rem otebranch] #新建一个本地分支,与指定的远程分支建立追踪关系3、分支绑定$ git branch --set-upstream-to = [remotename]/[remote_branch] [local-branch-name] # 建立追踪关系,在现有的本地分支与指定的远程分支之间4、切换分支$ git checkout [local-branch-name] #切换到指定分支,并更新工作区$ git checkout - #切换到上一分支5、合并分支$ git merge [local-branch-name] #合并指定分支到当前分支$ git merge --no-ff -m '说明' 分支名 #合并指定分支到当前分支,保留分支合并记录$ git cherry-pick [commit] # 选择一个commit ,合并进当前分支6、删除分支$ git branch -d [local-branch-name] #删除本地分支$ git branch -D [local-branch] #强制删除未合并的本地分支$ git branch -dr [remotename/remote-branch-name] #删除远程分支六、标签1、列出所有标签$ git tag #列出所有tag2、新建标签$ git tag [tagname] #新建一个tag在当前commit$ git tag [tagname] [commit] #新建一个tag在指定commit$ git tag -a [tagname] -m 'comment' [commit] #创建带有说明的标签3、查看某个标签$ git show [tagname] #查看某个tag信息4、删除标签$ git tag -d [tagname] #删除本地tag$ git push origin :refs/tags/[tagName] #删除远程tag5、推送某个标签到远程$ git push origin [tagname] # 提交指定tag$ git push origin --tags # 提交所有tag# 新建一个分支,指向某个tag$ git checkout -b [local-branch] [tag]七、查看信息1、查看变更的文件$ git status #显示有变更的文件2、查看版本历史$ git log #显示当前分支的版本历史$ git log --graph #显示当前分支的版本历史图$ git log --stat #显示commit历史,以及每次commit发生变更的文件$ git log - 5 --pretty --oneline #显示过去5次提交$git log --pretty=oneline --abbrev-commit3、显示指定文件是什么人在什么时间修改过$ git blame [file] # 显示指定文件是什么人在什么时间修改过4、显示代码差异$ git diff [file] # 显示暂存区和工作区的代码差异$ git diff --cached [file] # 显示暂存区和上一个commit的差异$ git diff HEAD [file] 或 $ git diff HEAD -- [file] # 显示工作区与当前分支最新commit之间的差异$ git diff --shortstat "@{0 day ago}" # 显示今天你写了多少行代码$ git show [commit] # 显示某次提交的元数据和内容变化5、显示当前分支的操作记录$ git reflog # 显示当前分支的操作记录6、修改提交历史$ git rebase [branch] # 把分叉的提交历史“整理”成一条直线八、远程同步1、 下载远程仓库的所有变动$ git fetch [remote] # 下载远程仓库的所有变动2、查看远程仓库$ git remote #查看远程服务器名$ git remote -v # 显示所有远程仓库$ git remote show # 显示某个远程仓库的信息3、增加远程仓库$ git remote add [remote] [url] # 增加一个新的远程仓库,并命名4、拉取远程仓库代码$ git pull [remote] [branch] #取回远程仓库的变化,并与本地分支合并5、推送分支到远程仓库$ git push [remote] [branch] # 推送本地指定分支到远程仓库$ git push --set-upstream [remote] [branch] 或 git push -u [remote][branch] # 推送到远程分支 并绑定分支(远程分支不存在,第一次推送某分支到远程分支并绑定)$ git push [remote] --force # 强行推送当前分支到远程仓库, 即使有冲突$ git push [remote] --all # 推送所有分支到远程仓库九、 撤销1、撤销修改$ git checkout -- [file] 或者 git checkout [file] 一种是将文件自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;一种是将文件已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。总之,就是让这个文件回到最近一次git commit或git add时的状态。2、版本回退$ git reset --hard HEAD/HEAD^/HEAD~100 # 版本回退(回退到当前版本/回退到上一个版本/回退到前100个版本)$ git reset --hard [commit] 回退到某个版本 #版本回退(回退到某个版本commitID)$ git reset HEAD [file] # 文件已经提交到暂存区,把git add 操作回退到未提交到暂存区,变成工作区有修改$ git reset [commit] # 重置当前分支的指针为指定commit, 同时重置暂存区,但工作区不变$ git reset --keep [commit] # 重置当前HEAD 为指定commit,但保持暂存区和工作区不变3、移除代码$ git stash #移除还未提交的变化代码$ git stash list #查看移除的代码$ git stash pop #再次移入4、忽略文件git update-index --assume-unchanged [–path] #忽略文件不进行提交git update-index --no-assume-unchanged [–path] #可以取消忽略文件在本地新建某个分支(远程无该分支)git checkout -b 分支名git push -u origin 远程分支名 或者 git push --set-upstream origin 分支名在本地新建某个分支(远程有该分支)1、git checkout -b 分支名 origin/远程分支名或 git branch --track 分支名 origin/远程分支名 创建分支并绑定远程分支2、git checkout -b 分支名 创建分支git branch --set-upstream-to = remote/远程分支名 分支名 将本地分支与远程分支进行绑定