Git使用总结
# 基本概念
我们先来理解下 Git 工作区、暂存区和版本库概念:
- 工作区:就是你在电脑里能看到的目录。
- 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
- 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。
下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:
- 图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage/index),标记为 "master" 的是 master 分支所代表的目录树。
- 图中我们可以看出此时 "HEAD" 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。
# 配置相关
如果首次使⽤Git,那刚开始首先是需要配置身份信息。
# 配置全局账户
全局账户就是该账户对所有的 Git 仓库都有效
git config --global user.name '你的账户名称'
git config --global user.email '你的 Email'
1
2
2
# 配置局部账户
局部账户也就是该账户只对当前Git仓库有效
git config --local user.name '你的账户名称'
git config --local user.email '你的 Email'
1
2
2
# 查看相关配置情况
- 查看全局的配置情况
git config --global --list
1
- 查看某个仓库下的配置情况
git config --local --list
1
# 本地基本操作
# 基本操作
- 初始化Git仓库
git init
1
- 拷贝项目
git clone <repo> <directory> // repo: Git仓库,directory: 本地目录,默认为当前目录
1
- 查看变更情况
git status
1
- 查看当前⼯工作在哪个分⽀上
git branch -v
1
- 切换到指定分⽀
git checkout 分⽀的名称
1
- 把当前⽬录及其子目录下所有变更都加⼊到暂存区
git add .
1
- 把仓库内所有变更都假如到暂存区
git add *
1
- 把指定⽂件添加到暂存区
git add ⽂文件1 ⽂文件2 ... ⽂文件n
1
- 创建正式的 commit,也就是把当前的数据提交上去
git commit
1
# 比较差异
- 比较某文件⼯作区和暂存区的差异
git diff 某⽂文件
1
- 比较某文件暂存区和HEAD的差异
git diff --cache 某⽂文件
1
- 比较⼯作区和暂存区的所有差异
git diff
1
- 比较暂存区和HEAD的所有差异
git diff --cache
1
# 暂存区与⼯作区之间回滚
- 把工作区指定⽂件恢复成和暂存区⼀样
git checkout 文件1 ⽂件2 ... 文件n
1
- 把暂存区指定⽂件回复和HEAD一样
git reset ⽂件1 ⽂件2 ... 文件n
1
- 把暂存区和工作区所有文件恢复成和HEAD一样
git reset --hard
1
- ⽤difftool比较任意两个commit的差异
git difftool commit1 commit2
1
注意: 从工作区回滚到暂存区则⽤checkout
,否则⽤reset
# 其他
- 查看哪些⽂件没有被Git管控
git ls-files --others
1
# 加塞临时任务处理
- 把未处理理完的变更先保存到stash中
git stash
1
- 临时任务处理完后继续之前的⼯工作
git stash pop // pop 相当于栈的出栈和⼊入栈⼀一样,把之前的任务弹出来
git stash apply // 和 pop 不不同的是, apply 相当于从栈顶把任务取出来,但是不不过从栈中把任 务移除
1
2
2
- 查看所有的stash
git stash list
1
- 取回某次 stash 的变更
git stash pop stash @{数字n}
1
# 日志
- 查看commit日志, ⽤一⾏显示
git log --oneline
1
- 显示最近的n个commit
git log -n
1
- ⽤图示显示所有的分⽀历史
git log --oneline --graph --all
1
- 查看涉及到某⽂件变更更的所有
commit git log 某⽂文件
1
- 查看指定文件的修改记录
git blame <file>
1
# 分支
# 创建新分⽀支
- 基于当前分⽀支创建新分⽀
git branch 新分⽀支
1
- 基于指定分⽀支创建新分⽀
git branch 新分⽀支 已有分⽀
1
- 基于某个commit创建分⽀
git branch 新分⽀支 某个commit的id
1
- 创建分⽀支并且切换到该分⽀
git chechout -b 新分⽀
1
# 列出分⽀
- 列出本地分⽀
git branch -v
1
- 列出本地和远端分⽀
git branch -av
1
- 列出远端所有分⽀
git branch -rv
1
- 列出名称符号某样式的远端分⽀
git branch -rv -l '某样式'
1
# 删除分⽀
- 安全删除本地某分⽀
git branch -d 要删除的分⽀
1
- 强⾏删除本地分⽀
git branch -D 要删除的分⽀支
1
- 删除已合并到 master 分⽀的所有本地分⽀
git branch --merged master | grep -v '^\*\| master' | xargs -n 1 git branch -d
1
- 删除远端 origin 已不不存在的所有本地分⽀
git remote prune origin
1
# 修改分支历史
我们的仓库的内容每次变更执⾏commit的时候,都会⽣成一个新的commit,不过有时候,我们不想产⽣新的commit,⽽是想要通过修改之前的commit来变更仓库的内容,那么就可以使⽤用如下命令了。
- 修改最后一次commit
git add
git commit --amend
1
2
2
- 修改中间的commit(假设代号为X)
gt rebase -i X // 前面的⼀个commit的id
git add
git rebase --contiue
1
2
3
2
3
# 两分支之间的集成
- 把A分支合入到当前分⽀,且为merge创建commit
git merge A分⽀支
1
- 把A分⽀合⼊到B分⽀,且为Merge创建commit
git merge A分⽀支 B分⽀支
1
- 把当前分⽀支基于B分⽀支做 rebase,以便便把B分⽀支合⼊入到当前分⽀支
git rebase B分⽀支
1
- 把A分⽀支基于B分⽀支做rebase,以便便把B分⽀支合⼊入到A分⽀支
git rebase B分⽀支 A分⽀支
1
# 标签
- 打标签
git tag 标签名
1
- 从commit打上标签
git tag 标签名 commit的id
1
- 查看已有标签
git tag
1
- 查看标签版本所修改的内容
git show 标签名
1
- 删除标签
git tag -d 标签名
1
# 远程仓库操作
- 列出所有的远程仓库
git remote -v
1
- 增加远程仓库版本
git remote add [shortname] [url]
1
示例:
git remote add origin git@github.com:tianqixin/runoob-git-test.git
git push -u origin master
1
2
2
- 删除远程仓库
git remote rm name
1
- 修改远程仓库名
git remote rename old_name new_name
1
上次更新: 2022/12/01, 11:09:34