Git 指令
设置用户名与邮箱
1 2
| git config --global user.name "name<自己的用户名>" git config --global user.email "email<自己的邮箱>"
|
生成 SSH Key 密匙
cd 到 ~/.ssh 目录下查看是否存在 id_rsa.pub 文件
1 2 3
| $ cd ~/.ssh $ ls id_rsa id_rsa.pub
|
若不存在,执行
1 2 3 4
| ssh-keygen -t rsa -C "emai<自己的邮箱>"
// 若涉及权限 sudo ssh-keygen -t rsa -C "emai<自己的邮箱>"
|
执行成功后执行 cat ~/.ssh/id_rsa.pub
查看密匙,如下图。
绑定远程仓库
1 2
| git remote add origin "https://github.com/xxx/xxx.git" // 初次绑定 git remote set-url origin "new repository" // 修改远程仓库
|
常用指令
基础
- 克隆
1 2 3 4 5 6 7 8
| git clone git@github.com:username/blog.git // 克隆
git clone --depth=1 git@github.com:username/blog.git // 只下载减小克隆的深度来加速克隆,只下载最新的commit
git clone --depth=1 --jobs=4 git@github.com:username/blog.git // --jobs=4 告诉 Git 使用 4 个线程下载,加快下载速度
git fetch --unshallow // 当--depth之后,希望获取完整的仓库历史
|
- 创建分支
- 切换分支
- 拉取合并
1 2 3 4
| git fetch origin // 获取远程分支/标签等到本地暂存区 git merge origin/<分支名> 或 git pull origin <分支> // 产生新的合并commit ID
|
- rebase 合并
1 2 3 4 5 6
| git pull origin <分支> --rebase // 不产生新的合并commit ID,合并远程代码 git rebase <分支> // 不产生新的合并commit ID,仅支持合并本地代码 git rebase -i HEAE~10 // 合并前十次commit git rebase -i <start commit> <end commit> // 合并指定多个commit,如果是中的commit,回发现HEAD指针是指向对应的commit,这时候可以基于这个Commit新建分支`rebase-branch`,切换回老分支,执行 git rebase rebase-branch
git rebase --abort // 取消rebase操作
|
rebase
实际效果如下: rebase
会造成的问题如下:参考:https://waynerv.com/posts/git-rebase-intro 参考:https://www.daolf.com/posts/git-series-part-2/
- 添加暂存区
1 2
| git add . // 添加所有到暂存区 git add <分支名> // 添加指定分支到暂存取
|
- commit
1 2
| git commit -m "提交日志" // 仅暂存区代码 commit git commit -am "" // 添加所有文件到暂存区,并 commit
|
- 创建 Tag
1 2 3 4
| git tag // 查看所有tag git tag v0.0.1 // 创建 v0.0.1 的标签 git push origin tag v0.0.1 // 将 tag v0.0.1 推送到远程 git push --tag // 推送所有标签到远程
|
- 提交远程
1 2 3
| git push // 强制提交 git push -f
|
- 查看分支
1 2
| git branch // 查看本地 git branch -a // 查看远程
|
- 删除分支
1 2 3
| git branch -d <分支名> // 删除本地分支 git branch -D <分支名> // 强制删除本地分支 git push origin -d <分支名> // 删除远程
|
撤销
1 2 3 4 5
| git reset <文件名> // 文件取消暂存区 git reset HEAD // 取消所有暂存取
git checkout -- <file> // 丢弃工作区的修改 git checkout -- . // 丢弃所有工作区
|
本地暂存
1 2 3 4 5 6 7 8 9 10
| git add <需要暂存的文件> // 添加需要暂存的文件 git stash commit // "暂存日志" git stash list // 查看所有暂存记录 git stash pop // 提取最新一条暂存记录 git stash pop <stash@{id}> // 提取指定一条暂存记录 git stash clear // 删除所有暂存记录 git stash drop // 删除最新一条暂存记录 git stash drop <stash@{id}> // 删除指定一条暂存记录 git stash apply // 也是提取暂存记录,与pop不同的时,apply会保留stash记录,所以建议用pop git stash apply <stash@{id}> // 也是提取暂存记录,与pop不同的时,apply会保留stash记录,所以建议用pop
|
回滚
1 2 3 4 5 6 7 8 9 10 11 12
| // 1、会删除代码,commit 记录不保留 git reset —-hard <commit id> // 回滚到指定 commit git push -f // 强制提交,远程仓库将回滚
// 2、会删除代码,回滚到上一个 commit git reset --hard HEAD^
// 3、会覆盖代码,commit 记录保留 git revert <commit id> // 用新的 commit 来回滚之前的 commit
// 4、不会删除代码 git reset --soft HEAD^ // 撤销上一次 commit,并且可以重新 commit
|
找回丢失的提交
1 2
| git reflog git log --graph --oneline --decorate $( git fsck --no-reflog | awk '/dangling commit/ {print $3}' ) > reflog.txt
|
注:reflog 并不会永久保存,它有 90 天的过期时间。
1
| git reflog // reflog 是 Git 用来记录本地仓库分支顶端的更新的一种机制,它会记录所有分支顶端曾经指向过的提交,因此 reflogs 允许我们找到并切换到一个当前没有被任何分支或标签引用的提交
|
使用.gitignore 无效的解决方法【已托管在 git 上的文件,需要保持到本地仓库】
1 2 3
| git rm -r --cached . // 所有文件 git rm -r --cached <文件名> // 指定文件 git add .
|
git 对文件夹名大小写不敏感
原因
- Git 在默认情况下是对文件夹名大小写不敏感的,这种行为是因为 Git 的设计目标是要在不同的操作系统上工作,并且一些操作系统(如 Windows)对文件名大小写不敏感,而另一些操作系统(如 Linux 和 macOS)对文件名大小写敏感。
- 默认情况下,Git 也会继承操作系统的行为。
实际
- 实际操作发现,在 Mac 上操作 git 修改文件名大小写,并没有被识别到。意味着 Mac 上操作 git 似乎也对文件名大小写不敏感。
解决方案
创建别名
1 2 3 4 5 6 7 8 9
| git config --global alias.sl "log --graph --decorate --pretty=oneline --abbrev-commit --all" git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset %C(bold blue)<%an>%Creset ---%C(yellow)%d%Creset %s %Cgreen(%cr)' --abbrev-commit" git config --global alias.co checkout git config --global alias.st status git config --global alias.ci commit git config --global alias.br branch git config --global alias.df diff git config --global alias.ig "update-index --assume-unchanged" git config --global alias.ug "update-index --no-assume-unchanged"
|
Git 乱码
- 输出结果为空,执行
export LANG="zh_CN.UTF-8"
命令,问题能否解决?
1
| export LANG="zh_CN.UTF-8"
|
- 如果不能,再试下修改
git config
, 这样应该就能解决了。
1 2 3
| git config --global i18n.commitencoding utf-8 git config --global i18n.logoutputencoding utf-8 export LESSCHARSET=utf-8
|
其他
1
| git shortlog -sn --since="1 months ago"
|
1 2
| git log --since=1.months --format='%aN' | sort | uniq -c | sort -rn | head -n 10 | while read count author; do echo -e "$author:\t$count"; git log --author="$author" --since=2.months --oneline --shortstat | grep "changed" | awk '{inserted+=$4; deleted+=$6} END {print "\tInserted lines:", inserted, "\n\tDeleted lines:", deleted}'; done
|
1
| git ls-files | xargs wc -l
|