Git常用命令
本文讲解并且亲测了常用的Git命令
Git命令 | 选项 | 参数 | 说明 |
---|---|---|---|
git init | 初始化/新建 当前目录为本地git仓库 | ||
git add | -A或-add | 添加当前目录下所有未被tracking以及被修改的文件到index中 | |
git add | file | 添加 file文件/指定文件 到index中 | |
git add | . | 递归添加当前目录下的所有文件(包含目录)到index中 | |
git rm | –cached | file | 只删除index中指定的文件,而处于工作目录(也即文件目录)中的文件不会受到影响(不会被删除) |
git rm | -f或–force | file | 同时删除index和工作目录中指定的文件 |
git rm | -r | * | 删除index暂存区里的全部文件 |
git status | 查看整个项目已经初始化的目录下所有文件的状态(处于 .gitignore 文件里的文件会被) | ||
git status | . | 查看当前目录下所有文件和目录的状态(非递归,也即当前目录内的子目录内的文件无法查看) | |
git commit | -m | ‘message’ | 提交当前index中的文件到仓库repo中,并且附上提交说明/信息 |
git commit | -am | ‘message’ | git add 和 git commit 的组合 |
git commit | –amend -m | ‘this is amend command’ | 当index没有新文件/修改的文件的前提下,该参数可以用来修改上一次commit的说明。当index中有新的文件或者修改的文件,该参数就会把这次index里的文件追加到上一次的commit中,而不会产生一次新的commit |
git log | 显示所有的commit记录 | ||
git log | -1 | 显示1行日志 -n为n行 | |
git log | –stat | 显示每个文件的变动信息 | |
git log | -p -m | ||
git log | v1.0 | 显示v1.0的日志 | |
git log | branch-1 ^branch-2 | 查看 branch-1 有,而 branch-2 中没有的 commit | |
git log | branch-2 ^branch-1 | 同理 查看 branch-2 有,而 branch-1 中没有的 commit | |
git log | branch-1…branch-2 | 查看 branch-2 中比 branch-1 中多提交了哪些commit,注意,列出来的是两个点后边(此处即branch-2)比前边(此处即branch-1)多提交的内容。 | |
git log | branch-2…branch-1 | 同理 查看 branch-1 中比 branch-2 中多提交了哪些commit | |
git log | branch-1…branch-2 | 不知道谁提交的多谁提交的少,单纯想知道有什么不一样,注意三个点 | |
git log | –left-right branch-1…branch-2 | 在上述情况下,再显示出每个提交是在哪个分支上,注意 commit 后面的箭头,根据我们在 --left-right branch-1…branch-2 的顺序,左箭头 < 表示是 branch-1 的,右箭头 > 表示是 branch-2的。 | |
git show | fjf01 | 显示某个commit的详细内容 | |
git show | HEAD | 显示HEAD指向的commit的提交日志 | |
git show | HEAD^ | 显示HEAD的父(上一个版本)的commit的提交日志 | |
git show | HEAD^^ | 显示HEAD的上两个版本的commit的提交日志 | |
git show | HEAD^5 | 显示HEAD的上5个版本的commit的提交日志 | |
git show | v1.0 | 显示v1.0标签的版本信息 | |
git tag | 显示已存在的tag | ||
git tag | -l | 显示已存在的tag | |
git tag | -a v3.0 -m ‘new version’ | 给当前HEAD指向的commit打上标签(tag),每次打tag都需要加上说明-m | |
git tag | -a v3.1 eci3t8 -m ‘new version’ | 给以前的某个历史提交打上标签(tag),并附加上说明-m | |
git push | –tags | 把本地全部标签推送到远程仓库,不加–tags参数默认是不会把标签推送到远程的 | |
git push | remote_host | v1.0.1 | 推送本地指定标签到远程 |
git push | remote_host --delete tag | v1.0.1 | 删除远程指定标签 |
git clone | xxx.git | 克隆远程仓库到本地 | |
git clone | xxx.git local_dir | 克隆远程仓库到本地指定目录下 | |
git clone | -b | new_branch_name https://xxxxx.git | clone时创建新的分支替代默认Origin HEAD(master) |
配置
Git命令 | 选项 | 参数 | 说明 |
---|---|---|---|
git config | –system | user.name “your name” | 该系统下,所有用户使用的配置 |
git config | –global | user.name “your name” | 该用户下的配置 |
git config | –local | user.name “your name” | 该 项目project/仓库repository 下的配置 |
git config | –system | user.email myemail@gmail.com | |
git config | –global | user.email myemail@gmail.com | |
git config | –local | user.email myemail@gmail.com | |
git config | –list | 查看配置,注意,所处的目录不同,显示的配置信息也不同哦 |
分支命令
Git命令 | 选项 | 参数 | 说明 |
---|---|---|---|
git checkout | dev | 切换到dev分支上,也是把dev分支的代码检出到工作区(working tree) | |
git checkout | sha1-value | 把指定历史版本的代码完整检出到工作区 | |
git checkout | sha1-value /path/to/file | 将指定文件的某个历史版本检出到工作区 | |
git checkout | sha1-value:/path/to/file new-name | 将指定文件的某个历史版本检出到工作区并且修改该文件名 | |
git checkout | -t | origin/dev | 创建本地dev分支(与远程对应分支同名)并换到该分支上,并且设置新分支dev的upstream信息 |
git checkout | -b | dev origin/dev | 等同于上面命令。从当前分支创建并检出(切换到)新分支的命令。实际上是git checkout -b new-branch-name current-branch 的简写形式,即默认从当前HEAD分支创建新新分支 |
git checkout | -b | new-branch-name 172je2 | 从历史版本为 172je2 上创建新分支并且切换到该分之上 |
git checkout | – | 取消对文件的修改,还原到最近的版本,废弃本地做的修改 | |
git branch | new-branch-name | 172je2 | 从历史版本为 172je2 上创建新分支,但不会切换到该分之上 |
git branch | -a | 查看所有分支 | |
git branch | -d | branch_name | 删除branch_name分支 |
git merge | branch_name | 把branch_name分支合并到本分支中(fast-forward模式) | |
git merge | –no-ff | branch_name | 把branch_name分支合并到本分支中,非fast-forward模式,即会创建一个合并的提交 |
分支对比
Git命令 | 选项 | 参数 | 说明 |
---|---|---|---|
git diff branch1 branch2 | –stat | 显示出所有有差异的文件列表 | |
git diff branch1 branch2 | 文件名(带路径) | 显示指定文件的详细差异 | |
git diff branch1 branch2 | 显示出所有有差异的文件的详细差异 | ||
git log | branch-1 ^branch-2 | 查看 branch-1 有,而 branch-2 中没有的 commit | |
git log | branch-2 ^branch-1 | 同理 查看 branch-2 有,而 branch-1 中没有的 commit | |
git log | branch-1…branch-2 | 查看 branch-2 中比 branch-1 中多提交了哪些commit,注意,列出来的是两个点后边(此处即branch-2)比前边(此处即branch-1)多提交的内容。 | |
git log | branch-2…branch-1 | 同理 查看 branch-1 中比 branch-2 中多提交了哪些commit | |
git log | branch-1…branch-2 | 不知道谁提交的多谁提交的少,单纯想知道有什么不一样,注意三个点 | |
git log | –left-right branch-1…branch-2 | 在上述情况下,再显示出每个提交是在哪个分支上,注意 commit 后面的箭头,根据我们在 --left-right branch-1…branch-2 的顺序,左箭头 < 表示是 branch-1 的,右箭头 > 表示是 branch-2的。 |
修改commit
Git命令 | 选项 | 参数 | 说明 |
---|---|---|---|
git rebase | -i | 到哪个旧commit的hash值 | 注意,该commit是不会被合并的。接着进入交互模式,排第一行的是最旧的commit,除了这一个外,把每个commit前的pick改成squash,就相当于合并到第一行的commit上,接着修改commit信息。 |
按功能排序
取消修改,恢复版本
取消对文件的修改。还原到最近的版本,废弃本地做的修改。
git checkout -- <file>
取消已经暂存的文件。即,撤销先前"git add"的操作
git reset HEAD <file>...
修改最后一次提交。用于修改上一次的提交信息,或漏提交文件等情况。
git commit --amend
回退所有内容到上一个版本
git reset HEAD^
回退a.py这个文件的版本到上一个版本
git reset HEAD^ a.py
向前回退到第3个版本
git reset –soft HEAD~3
将本地的状态回退到和远程的一样
git reset –hard origin/master
回退到某个版本
git reset 057d
回退到上一次提交的状态,按照某一次的commit完全反向的进行一次commit.(代码回滚到上个版本,并提交git)
git revert HEAD
回滚单个文件
git reset sha-1 path/to/file
git commit path/to/file -m 'message'
git checkout path/to/file
几点说明:
- 一次commit是指当你输入git log是,看到的一串码,如commit e7d1b777de790970af704dbeac8c0ef3d21335b4,这算一次commit