git常用命令合集

准备仓库

初始化仓库

git init
// 在当前目录创建新的空仓库

克隆仓库

git clone <url> <dir>
//从指定的URL远程仓库克隆一份到本地

配置git

罗列配置项

git config --list
// 显示当前配置项

设置用户名

git config user.name <"name">
// 设置提交者用户名

设置电子邮件地址

git config user.email <"email">
// 设置提交者电子邮件地址

设置 Unix/Window 系统中 EOL 标志转换方式

git config core.autocrlf true
// 针对 commit 和 checkout 自动转换 Unix 和 Windows 系统下行尾结束标志

EOL Conversion on Save Only

git config core.autocrlf input
// Convert CRLF to LF only when commiting, use original line ending on checkout.

切换编辑器

git config core.editor <editor>
// 切换撰写提交信息的文本编辑器

获取指定配置项

git config --get <config-name>
// 获取指定配置项的配置信息

重置配置项

git config --unset <config-name>
// 重置指定的配置项的配置信息

配置作用域

git config [--global | --system] <name> <value>
// --local 或默认情况下仅作用于当前仓库,
// --global 作用于所有用户的仓库,
// --system 作用于整个系统仓库

为配置文件.config中指定的配置项设定一个值

git config --global user.name shuaihua

为git命令创建别名

git config --global alias.co checkout

移除一个别名

git config --global --unset alias.co

有用的别名设置示例:可视化分支

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

仓库

查看状态

git status
// 查看当前工作区的状态,查看文件变动情况

添加文件变动信息

git add <file>
// 为下一次提交添加文件或目录

查看每一个对某文件曾修改过的开发者的修改记录

git blame app.js

从版本库移除文件

git reset -- <file>
// 从版本库中移除文件,当前目录或文件不受影响

将版本库回退到上两个版本,下面两种写法相同

git reset --hard HEAD~2
git reset --hard HEAD^^
// 如果是不小心回退到了上个版本,如果你还能在终端上查到那一个版本号可以指定版本号回退。
//如果你中途关掉了终端,而无法确定版本号,可以使用 git reflog 命令查看你的每一个命令使用记录,最左侧就是每一次命令操作的版本号,使用该版本号指定要回退到的某一版本。
git reset --head 783f67f0a96920b72da47b47ba72525dfe5c9e1d

把暂存区的修改撤销掉(unstage),放回工作区:

git reset HEAD

把暂存区指定文件的修改撤销掉(unstage),重新放回工作区:

git reset HEAD example.txt

忽略变动

git checkout -- <file>
// 忽略文件变动,回滚到上次提交后的全新状态

删除文件

git rm <file>
// 从当前目录和版本库中删除文件

提交信息

git commit -m ["message"]
// 将文件变动信息提交至版本库,并附加变动描述信息

修正提交信息

git commit --amend
// 替换当前版本库分支上最近一次的提交信息

修正提交人提交日期

git commit --amend --reset-author
// 修正提交人和提交日期

更改作者

git commit --amend --author="Author Name <email>"
// 使用给定的作者名与电子邮件地址修正提交人信息,提交日期不会更改。

更改作者日期

git commit --amend --date="1999-12-31T23:59:59"
// 修正作者日期,为了方便采用 ISO 8601 格式

提交日志

git log [-n <number>]
// 罗列提交日志,使用 <number> 限制显示的条目数

git log --pretty=oneline
// 使用一行显示单条历史记录所有信息,不再眼花缭乱

git log --graph
// 图形化选项,查看分支合并字符图,很漂亮很实用~。

git log --graph --pretty=oneline --abbrev-commit
// 开启 图形化、单行、版本号简写 3个选项

短格式日志

git shortlog
// 罗列短格式提交日志

罗列日志摘要

git shortlog -s
// 罗列更加简短的提交计数摘要

工作目录差异比较

git diff
//罗列版本库当前分支与工作目录差异

列出命令历史记录

git reflog

工作目录与分支差异比较

git diff <branch-name>
// 显示指定分支与当前工作目录之间的差异

移除未跟踪文件

// 采用交互引导的方式从仓库移除未跟踪文件
git clean -i

// 移除本地仓库中所有未跟踪的文件,.gitignore中匹配的文件除外。
git clean -f

// 移除本地仓库中所有未跟踪的文件和目录,.gitignore中匹配的文件和文件夹除外。
git clean -df

// 移除本地仓库中所有未提交过的文件和目录,包括.gitignore中匹配的文件和文件夹。
git clean -xdf

管理分支

分离分支

git checkout --detach
// 从当前分支分离head

创建新分支

git checkout -b <branch-name>
// 从当前head创建新的分支

切换分支

git checkout <branch-name>
// 切换活动分支

切换到某个提交

git checkout <commit-name>
// 根据提交名(分支名、提交hash或相对HEAD引用)切换到某个提交

切换到上一次提交前

git checkout <HEAD~1>
// 分离head并且转换到上一次提交前的状态
// ~1 代表上一次提交前,~2代表上两次提交前,以此类推

重置当前HEAD

git reset --hard <commit-name>
// 移动当前分支head到指定的提交名处
// 更改版本库并且丢弃当前工作目录
// 潜在风险!切换后所在的当前提交处之后的提交可能丢失
// 谨慎使用

罗列分支

git branch [--list]
// 罗列本地分支

罗列远程跟踪分支

git branch -r
// 罗列远程跟踪分支

罗列全部分支

git branch -a
// 罗列所有本地和远程跟踪的分支

删除分支

git branch -d <branch-name>
// 删除已经合并的分支

强制删除分支

git branch -D <branch-name>
// 强制删除分支,即使未合并
// 谨慎使用

合并分支

git merge <other-branch>
// 将其他分支与当前分支合并
// 如果条件允许将采用 fast-forward

使用合并提交信息合并

git merge --no-ff <other-branch>
// 合并其他分支,采用合并提交

交互式分支变基

git rebase -i <other-branch>
// 采用交互引导方式使用其他分支为当前分支变基

管理标签

全部标签

git tag
// 罗列全部可用的标签

添加标签

git tag <tag-name>
// 创建新的名为 <tag-name> 的轻量级标签

删除标签

git tag -d <tag-name>
// 删除名为 <tag-name> 的标签

藏匿工作目录

贮藏工作目录

git stash save
// 保存当前工作目录的状态,并清扫文件变动

罗列贮藏列表

git stash list
// 罗列贮藏列表,stash@{0} 为最近一次贮藏的状态

恢复已贮藏状态

git stash pop
// 恢复最近一次贮藏的状态
// 并应用到当前工作目录

移除最近一次贮藏状态

git stash drop
// 移除最近一次贮藏状态
// 已贮存的最近一次状态将被舍弃

清空贮藏状态

git stash clear
// 移除所有贮藏状态
// 贮藏的状态全部将被舍弃

远程仓库

显示远程仓库

// 显示用于 push 和 fetch 的远程仓库的 name 和 url
git remove -v

// 显示远程仓库的本地代号
git remote

//查看远程仓库信息
git remote -v
git remote --verbose

添加远程仓库

git remote add <remote-name> <url>
// 用给定的远程仓库名称添加新的远程仓库

推送分支到远程仓库

git push <remote-name> <branch-name>
// 将本地分支推送到远程仓库

删除远程分支

// 从远程仓库删除分支
git push --delete <remote-name> <branch-name>

// 嗅探有哪些远程版本库中已经删除了而本地版本库还没有删除的分支
git remote prune origin --dry-run

// 移除远程不存在的本地远程追踪分支
git remote prune origin

// 删除本地仓库与远程仓库的关联
git remote rm origin

推送标签

git push <remote-name> <tag-name>
// 推送单个本地标签到远程仓库

推送全部标签

git push --tags <remote-name>
// 推送全部本地标签到远程仓库

删除远程标签

// 从远程仓库删除标签
git push --delete <remote-name> <tag-name>

获取远程分支

git fetch <remote-name>
// 更新远程跟踪分支
// 远程跟踪分支不会自动合并到本地分支
// 使用 git branch -r 罗列全部远程跟踪分支

拉取远程分支

git pull <remote-name> <branch-name>
// 从远程分支取回对象
// 并与当前分支合并,谨慎使用

维护仓库

优化仓库

git gc
// 移除不需要的文件和引用,优化仓库
// 适合定期使用该命令

智能优化仓库

git gc --auto
// 按需检查并执行 gc

检查仓库

git fsck
// 校验仓库的完整性

下一篇《实现基于canvas画布实时渲染的虚拟对象关系流》

上一篇《Angular最佳实践备忘之基本工作流》

永久链接 http://www.shuaihua.cc/article/git-commonly-command-line-compilations

快速跳转 心头好文 - efficiency - 《git常用命令合集》

发布日期 2017年12月21日 星期四

版权声明 自由转载-非商用-非衍生-保持署名(创意共享3.0许可证