Git
详细命令及解释
以下 仓库 指版本库 ( respository )
本地和远程
命令 | 解释 |
---|---|
git config --global user.name <用户名> git config --global user.email <邮箱> |
设置你本地全局用户名和邮箱,不加参数为查看 |
git config user.name <用户名> git config user.email <邮箱> |
设置你当前仓库的用户名和邮箱,不加参数为查看 |
git init |
在当前目录下初始化一个空的仓库 |
git remote add origin <远程仓库地址> |
设置远程仓库地址,即设置origin的值 |
git remote -v |
查看远程仓库的信息,即查看origin的值 |
git remote rm origin |
移除远程仓库地址,即删除origin |
git config --list |
查看当前和全局的所有配置 |
git config --system --list |
查看全局(计算机)配置 |
git config --global --list |
查看全局(计算机当前登录用户)配置 |
git config --local --list |
查看本仓库配置 |
暂存、提交和推送
命令 | 解释 |
---|---|
git add <xxx/.> |
将xxx或所有文件添加到暂存区 |
git commit -m "<comment>" |
将暂存区的文件提交到本地仓库 |
git commit --amend -m "comment" |
修改最近一次提交的备注信息 |
git status |
查看本地工作区、暂存区中文件的修改状态 |
git push origin |
将本地仓库的变更内容推送到远程仓库 |
git push -u origin |
推送,并将origin设为默认主机,之后simple推送可以省略origin |
git log git log --oneline git reflog git log --oneline -3 |
查看日志 查看日志,按行显示 查看操作记录 按行查看3行日志 |
比较差异和回退代码
命令 | 解释 |
---|---|
git diff |
比较工作区与暂存区的差异 |
git diff <分支名> |
比较工作区与仓储区(指定分支)的差异 ( 添加--stat 参数,输出差异文件列表 ) |
git diff <commit id> |
比较工作区与仓储区(指定版本)的差异 ( 添加--stat 参数,输出差异文件列表 ) |
git diff --cached |
比较暂存区与仓储区的差异 |
git diff <文件路径> git diff <commit id> <文件路径> |
比较工作区与仓储区指定路径、指定版本号、指定文件的差异 |
git diff master origin/master |
比较本地仓库与远程仓库的主分支 |
git reset <文件路径 或 .> |
重置某文件到仓储区最新版本 |
git reset <commit id> |
重置到指定版本(此时工作区并未回退) |
git reset <commit id> --hard |
重置到指定版本(!同时回退工作区) |
git checkout <文件路径 或 .> |
将指定的文件从暂存区拉回工作区,如果没有暂存则指向仓储区 |
git push -f |
将本地仓储区强制推送到远程,使远程仓库版本与本地强制同步 |
分支
命令 | 解释 |
---|---|
git branch |
查看本地所有分支 |
git branch -r |
查看远程所有分支 |
git branch -a |
查看所有分支(本地和远程) |
git branch <分支名> |
创建分支 |
git checkout <分支名> |
切换到某个分支 |
git branch -d <分支名> |
删除某个分支 |
git push origin --delete <分支名> |
删除某个远程分支 |
git merge <分支名> |
将某个分支合并到当前分支上 |
git branch -vv |
查看本地和远程分支的对应关系 |
git branch --set-upstream-to=origin/<远程分支名> <本地分支名> |
设置本地和远程分支的对应关系 |
贮藏
命令 | 解释 |
---|---|
git stash |
贮藏 |
git stash push -m <message> <path> |
贮藏,贮藏消息及文件 |
git stash list |
查看贮藏列表 |
git stash apply |
应用顶部第一个贮藏(不删除该贮藏) |
git stash apply stash@{<number>} |
应用指定顺序的贮藏(不删除该贮藏) |
git stash pop |
应用顶部第一个贮藏,并删除该贮藏 |
git stash pop stash@{<number>} |
应用指定顺序的贮藏,且删除该贮藏 |
git stash drop |
直接删除顶部第一个贮藏(!警告,你将失去该贮藏) |
git stash drop stash@{<number>} |
直接删除指定顺序的贮藏(!警告,你将失去该贮藏) |
SSH
关于 git 的 ssh (Secure Shell) (安全外壳协议)
通常我们在本地生成公钥和私钥;然后在 git 远程版本库账户中添加该公钥。这样,在每次pull和push的时候,就会解密比对远程存储的公钥与本地的私钥,以验证身份的合法性。
// 通常,公钥、私钥都存储在 .ssh 文件夹中。
// 我们在生成它们之前,不妨先检查一下,它们是否已经存在。
ls ~/.ssh -l
// 如果输出为空,表明当前不存在公钥、私钥
// 这时,我们可以生成公钥、私钥
ssh-keygen
// 该命令将会生成公钥、私钥。在生成时,需要作一些配置,默认即可。
// 当我们生成公钥、私钥之后,或者公钥、私钥已经存在时,"ls ~/.ssh -l"命令将会输出:
-rw-r--r-- 1 John 197121 1675 七月 12 2017 id_rsa
-rw-r--r-- 1 John 197121 405 七月 12 2017 id_rsa.pub
-rw-r--r-- 1 John 197121 2778 四月 24 22:19 known_hosts
// 其中 id_rsa 为私钥; id_rsa.pub 为公钥; kuown_hosts 中保存了你所绑定的所有远程版本库地址
// 你可以通过以下命令查看公钥,然后拷贝它
cat ~/.ssh/id_rsa.pub
LF&CRLF
配置 | 含义 |
---|---|
git config --global core.autocrlf true |
提交时转换为LF,检出时转换为CRLF |
git config --global core.autocrlf false |
提交检出均不转换 |
git config --global core.autocrlf input |
提交时转换为LF,检出时不转换 |
git config --global core.safecrlf true |
拒绝提交包含混合换行符的文件 |
git config --global core.safecrlf false |
允许提交包含混合换行符的文件 |
git config --global core.safecrlf warn |
提交包含混合换行符的文件时给出警告 |
其他
一般地,如果我们不需要git跟踪某个文件或文件夹的话,我们只需在.gitignore文件中标记下来即可;
特别地,如果一个文件已经被跟踪了,我再想取消跟踪它,该怎么办呢?
git update-index --assume-unchanged [file_path]
在本地标记该文件为 <未更改的状态> (取消跟踪该文件)
mark files as "not changing"
git update-index --no-assume-unchanged [file_path]
清除上面对该文件的标记,重新跟踪该文件
clear assumed-unchanged bit
git ls-files -v | grep '^h\ '
如果使用以上方式标记的文件多了,可以使用此命令查看具体哪些文件被标记了。
git config --global i18n.commitencoding utf-8
git config --global i18n.logoutputencoding utf-8
export LESSCHARSET=utf-8
解決
git log
日志乱码问题