1 常用命令

命令 作用
git init 在当前目录生成.git/
git config user.name XXX 设置签名_用户名 (仅对当前项目有效)
git config user.email YYY 设置签名_用户Email (仅对当前项目有效)
git config —global user.name XXX 设置签名_用户名 (对本用户有效, 设置一次即可)
git config —global user.email YYY 设置签名_用户Email (对本用户有效, 设置一次即可)
git config —system user.name XXX 设置签名_用户名 (对OS内所有用户有效, 设置一次即可)
git config —system user.email YYY 设置签名_用户Email (对OS内所有用户有效, 设置一次即可)
git status 查看工作区, 暂存区状态
git ls-files 查看暂存区中文件信息
git checkout — 文件名 取消该文件工作区的所有修改
git rm -f file1 将file1从 工作区和暂存区 删除
git rm -f —cached file1 将file1移出暂存区(不会删除工作区的文件)
git rm -rf —cached foder1 将foder1中的全部文件移出暂存区
git add . 将当前目录所有文件添加到暂存区
git add file1 将工作区的file1添加到暂存区
git commit -m “备注” . 将暂存区的所有文件提交到本地库的当前分支
等价于
- git add .
- git commit -m “备注”

还等价于
- git commit -am “备注”
| | git commit -m “备注” file1 | 将暂存区的file1提交到本地库 | | | | | git log | 显示本地库的历史提交记录 | | git log —oneline | 每个历史记录以一行显示, hash局部显示 | | git log —pretty=oneline | 每个历史记录以一行显示, hash全显示 | | git reflog | 显示版本穿梭历史记录 | | | | | git reset —soft 局部Hash | 前进和后退版本, 仅在本地库移动HEAD指针 | | git reset —mixed 局部Hash | 前进和后退版本, 在本地库,暂存区移动HEAD指针 | | git reset —hard 局部Hash | 前进和后退版本, 在本地库,暂存区,工作区移动HEAD指针 | | git reset —hard HEAD^ | 让HEAD指针指向前一个版本, 即恢复前一个版本 | | git reset —hard HEAD~n | 让HEAD指针指向前n个版本 | | git reset —merge | 回退到merge冲突前 | | git rebase —abort | 终止变基 | | git revert HEAD~1 | reset只能撤销本地分支的更改, revert能撤销远程分支的更改 | | | | | git diff file1 | 查看 工作区file1 与 暂存区file1 的差异 | | git diff HEAD file1 | 查看 工作区file1 与 本地库file1 的差异 | | git diff HEAD^ file1 | 查看 工作区file1 与 本地库Head指向的上一个版本的差异 | | | | | git branch | 查看本地分支 | | git branch -r | 查看远程分支 | | git branch 分支名 | 创建 新分支 | | git branch -d XXX | 删除 分支XXX | | git checkout XXX (新版用switch) | 切换到 分支XXX, 同时HEAD指针指向分支XXX的叶子结点 | | git checkout -b 分支名 (switch -c) | 创建 并 切换到新分支 | | git checkout HEAD^ | 将HEAD指针指向前一个节点 | | git merge XXX | 把分支XXX所做修改 合并到当前分支(如master) | | git rebase master | 把当前分支(如xxx)移到master分支的后面 | | | | | git push —set-upstream origin dev | 设置远程 | | git branch —set-upstream-to=origin/dev | 设置当前分支的远程分支(只有origin/dev存在时才会创建) | | git remote add origin [HTTPS/SSH] | 给远程库[HTTPS/SSH]取一个别名为origin | | git remote remove origin | 移除远程库别名 | | git remote -v | 查看远程库的别名 | | git push origin —delete master | | | git push XXX master | 把当前所在本地库推送到远程库XXX的主干 | | git clone [HTTPS/SSH] | 把远程库克隆到本地库的当前目录中 | | | | | git pull XXX master | 从远程库拉取到本地 | | | | | git tag -a 标签名 -m “标签描述” | 添加标签 | | git push origin 标签名 | 推送标签到远程库 | | git tag -d 标签名 | 删除本地标签 | | git push origin —delete tag 标签名 | 删除远程库标签 | | | | | git config —global credential.helper cache | 设置记住密码, 默认15分钟 | | git config —global credential.helper store | 长期存储密码 | | | | | sudo apt install dos2unix
find . -type f -exec dos2unix {} + | 把crlf全部转lf | | | | | git stash
git stash apply | git stash的作用范围是整个工作目录,不是某个分支
切分支时, 还不能commit时用这个来暂存
切回分支后, 恢复暂存的修改 |

image.png
gitconfig免输密码

  1. [user]
  2. name = mingwei
  3. email = mingwei@em3.ai
  4. [credential]
  5. helper = cache --timeout 99999999

2 git rebase

我们首先用 rebase 将 master 合并到了 feature,即使两个分支都有不同的提交,也得到了一条完全线性的 feature 分支,而且没有额外的 Merge 提交。
接着又切换到 master 分支合并了 feature。rebase 之后的 feature 分支上,所有提交都是 master 的后继提交,因此我们将直接执行快进合并。
Git常用命令 - 图2

3 git stash

保存当前工作进度,会把暂存区和工作区的改动进行保存
后续你可以在任何时候任何分支重新将某次的修改推出来
默认情况下,git stash会缓存下列状态的文件:

  • 添加到暂存区的修改(staged changes)
  • Git跟踪的但并未添加到暂存区的修改(unstaged changes)

但以下状态的文件不会缓存:

  • 在工作目录中新的文件(untracked files)
  • 被忽略的文件(ignored files)