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时用这个来暂存
切回分支后, 恢复暂存的修改 |
gitconfig免输密码
[user]
name = mingwei
email = mingwei@em3.ai
[credential]
helper = cache --timeout 99999999
2 git rebase
我们首先用 rebase 将 master 合并到了 feature,即使两个分支都有不同的提交,也得到了一条完全线性的 feature 分支,而且没有额外的 Merge 提交。
接着又切换到 master 分支合并了 feature。rebase 之后的 feature 分支上,所有提交都是 master 的后继提交,因此我们将直接执行快进合并。
3 git stash
保存当前工作进度,会把暂存区和工作区的改动进行保存
后续你可以在任何时候任何分支重新将某次的修改推出来
默认情况下,git stash会缓存下列状态的文件:
- 添加到暂存区的修改(staged changes)
- Git跟踪的但并未添加到暂存区的修改(unstaged changes)
但以下状态的文件不会缓存:
- 在工作目录中新的文件(untracked files)
- 被忽略的文件(ignored files)