日常工作中,如果能遵循工作流程,提交代码仔细、规范,其实仅需要 6 个常用的 Git 命令。如图:
新建代码库
git init
,在当前目录新建一个 Git 代码库git init [project-name]
,新建一个目录,并将其初始化为 Git 代码库git clone [url]
,克隆一个远程代码库
配置
Git 的配置文件.gitconfig
,在用户主目录下(全局配置 –global),在项目目录下(项目配置 –local),在安装目录下(系统配置 –system)
git config --list
,显示当前 Git 配置git config -e [--global]
,编辑 Git 配置文件git config [--global] user.name "[name]"
,设置用户信息
增加/删除文件到暂存区
git add [file1] [file2] ...
,添加指定文件到暂存区git add .
,添加当前目录的所有文件到暂存区git rm [file1] [file2] ...
,删除工作区文件,并将这次删除放入暂存区git rm --cached [file]
,停止追踪指定文件,但该文件会保留在工作区git mv [rile-original] [file-renamed]
,改名文件,并将这个改名放入暂存区
代码提交
git commit -m [message]
,提交暂存区到本地仓库git commit [file2] [file2] ... -m [message]
,提交暂存区指定文件到本地仓库git commit -a
,提交工作区自上次 commit 之后的变化,直接到本地仓库git commit -v
,提交时显示 diff 信息git commit --amend -m [message]
,使用一次新的 commit,替代上一次提交
分支
git branch
, 列出所有本地分支git branch -r
, 列出所有远程分支git branch -a
,列出所有本地和远程分支git branch [branch-name]
,新建一个分支,但依然停留在当前分支git checkout [commit] -b [branch-name]
,从提交历史检查一个新的分支,相当于恢复误删的分支git checkout -b [branch-name]
,新建一个分支,并切换到该分支git branch [branch] [commit]
,新建一个分支,指向指定的 commitgit branch --track [branch] [remote-branch]
,建立一个新分支,与指定的远程分支建立追踪关系git branch --set-upstream-to [origin/branch]
,修改追踪仓库,在现有分支与指定的远程分支建立追踪关系git chekout [branch]
,切换到指定分支,并更新工作区git merge [branch]
,合并指定分支到当前分支git cherry-pick [commit]
,选择一个 commit,合并进当前分支git branch -d [branch-name]
,删除本地分支git push origin --delete [branch-name]
,删除指定远端分支1
2
3git push GitTest --delete branches
To https://github.com/Better-Jiang/GitTest.git
- [deleted] branches
标签
git tag
,列出所有标签git tag -a [tag] -m [message]
,新建一个 附注类型的 tag,在当前 commitgit tag [tag] [commit]
,新建一个 tag,在指定 commitgit tag -d [tag]
,删除指定 taggit show [tag]
,查看 tag 信息git push [remote] [tag]
, 推送指定 taggit push [remote] --tags
,推送所有 taggit push [remote] :refs/tags/[tag]
,远端删除指定 tag1
2
3
4
5
6git push GitTest :refs/tags/v1.1
remote: warning: Deleting a non-existent ref.
To https://github.com/Better-Jiang/GitTest.git
- [deleted] v1.1
查看信息
git status
,显示文件状态,是否有变更文件git log
,当前分支的版本历史git log --stat
,显示 commit 历史,以及每次 commit 发生变更的文件git log --follow [file]
,git whatchanged [file]
显示某个文件的版本历史,包括文件改名git log -p [file]
,显示指定文件相关的每一次 diffgit blame [file]
,显示指定文件什么人,在什么时间修改过git diff
,显示暂存区和工作区的差异git diff --cached
,暂存区和上一个 commit 的差异git diff HEAD
,暂存区和当前分支最新 commit 之间的差异git diff [commit] [commit]
,两次提交之间的差异git show [commit]
, 显示某次提交的元数据和内容变化git show --name-only [commit]
,显示某次提交发生变化的文件git show [commit]:[filename]
,显示某次提交时,某个文件的内容git reflog
,显示当前分支的最仅几次提交
远程同步
git fetch [remote]
,下载远程仓库的所有变动git remote -v
,显示所有远程仓库git remote show [remote]
,显示某个远程仓库的信息git remote add [shortname] [url]
,增加一个新的远程仓库,并命名git pull <y远程主机名> <远程分支名>:<本地分支名>
,git pull origin master:testing
,将远程主机 origin 的 master 分支拉取过来,与本地的 testing 分支合并。冒号:省略,表示与当前分支进行合并。git pull [remote] [branch]
,取回远程仓库的变化,并于当前本地分支合并git push <远程主机名> <本地分支名>:<远程分支名>
,将本地分支上传到远程分支。git push [remote] [local-branch]
,上传本地指定分支,到远程仓库的同名分支,如果没有则创建新分支git push [remote]: refs/for/master
,如果省略了本地分支,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。等同于git push [remote] --delete [branch]
refs/for
,表示我们提交到服务器之后需要经过 code review 之后才能进行 merge- 如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,
git push origin
,将当前分支推送到 origin 主机的对应分支 git push [remote] --force
,强行推送当前分支到远程仓库,即使有冲突git push
,如果当前分支只有一个远程分支,则可以省略主机名。
撤销
git checkout [file]
,恢复暂存区的指定文件到工作区git checkout [commit] [file]
,恢复某个指定 commit 的指定文件到工作区git checkout .
,恢复上一个 commit 的所有文件到工作区git reset [file]
,重置暂存区的指定文件,与上一次 commit 保持一致,但工作区不变git reset --hard
,重置暂存区与工作区内容,与上一次 commit 保持一致git reset [commit]
,重置当前分支指针为指定 commit,同时重置暂存区,但工作区保持不变git revert [commit]
,新建一个 commit,撤销指定 commit 的所有变化,并应用到当前分支
其他
git archive
,生成一个可供发布的压缩包git stash
,备份当前工作区的内容git stash pop
,从 Git 栈中,读取最近一次保存的内容,恢复工作区相关内容git stash list
,显示 Git 栈内所有备份git stash clear
,清空 Git 栈