Git
面试常考的 git merge 和 git rebase 区别
https://www.jianshu.com/p/f7ed3dd0d2d8
在什么场景下,使用git rebase 和 git merge
从目前的开发流程来看,在合并分支的时候最好使用 git merge,使用 git rebase 是有风险的
当你要拉去的分支的是你当前开发的分支,可以使用 git pull --rebase
- 分布式
- 版本控制
- 软件/安装工具
集中式版本控制
svn
缺点:
- 断网后无法连接版本中心控制器,无法提交
git 结构
-
工作区 — 写代码
-
暂存区 — 暂时存储
-
本地库 — 历史版本
-
从工作区 – 暂存区
git add .
- 从暂存区 – 本地库
git commit
代理托管中心
维护远程库
- gitlab
- github
- 码云
git 命令行操作
- git 初始化
git init
- 设置签名
项目级别/用户级别
git config
git config --global
1. git status
查看工作区/暂存区的状态
2. 撤销 git add
**git add **
**git add ** 将文件从工作区添加到暂存区
1)撤销 git add 新添加的文件(git add <file>)
从暂存区撤销到工作区
git rm --cached <file>
2)撤销工作区的修改(还没有 git add)
git restore <file>
git checkout <file>
3)撤销暂存区的修改(git add -u)
从暂存区到工作区
git restore --staged <file>
git reset Head <file>
3. git log
1)log 格式化显示
git log --oneline
2)git reflog
HEAD@{0} 移动当前版本需要多少步
$ git reflog
c6adb25 (HEAD -> master) HEAD@{0}: commit: v5
40203f7 HEAD@{1}: commit: v4
494e90f HEAD@{2}: commit: v3
b13ff4e HEAD@{3}: commit: v2
f969935 HEAD@{4}: commit: update
625bf57 HEAD@{5}: commit (initial): first commit
4. git reset 版本前进和后退
- 基于索引值操作 【推荐】
$ git reset --hard 5b1a394
$ git reflog
5b1a394 (HEAD -> master) HEAD@{0}: reset: moving to 5b1a394
51da3d4 HEAD@{1}: commit: v8
214196b HEAD@{2}: commit: v7
5b1a394 (HEAD -> master) HEAD@{3}: commit: v6
c6adb25 HEAD@{4}: commit: v5
40203f7 HEAD@{5}: commit: v4
494e90f HEAD@{6}: commit: v3
b13ff4e HEAD@{7}: commit: v2
f969935 HEAD@{8}: commit: update
625bf57 HEAD@{9}: commit (initial): first commit
- 使用 ^ 符号
返回上一次提交
git reset --hard Head^
- 使用 ~ 符号
git reset --hard Head~3
1)–soft
仅仅本地库移动 Head 指针
2)–hard
在本地库移动 Head 指针,并重制暂存区、工作区
3)–mixed
在本地库移动 Head 指针,并重制暂存区
撤销 git commit
$ git reset --hard Head^ # 不保存本地修改,返回上一个版本
$ git reset --soft Head^ # 保存本地修改,暂存区中还存在(git add)
$ git reset --mixed Head^ # 保存本地修改,工作区保存修改
删除文件并找回:
- 前提是删除前已经提交到本地库
- git reset --hard Head
4. git diff
$ git diff <file> # 工作区文件和暂存区进行比较
$ git diff [指针] <file> # 工作区文件和历史版本库进行比较
5. git 分支
$ git branch -v # 显示所有的分支
$ git checkout # 切换分支
$ git merge # 合并分支
6. Hash 算法
MD5
SHA-1
CRC32
7. 关联远程仓库
$ git remote add origin <url>
origin 新建关联远程仓库的别名
1)推送到远程分支
$ git push origin <branch>
2)git clone
3)git pull
fetch + merge
8. Git 工作流
- 集中式工作流
SVN
- git-flow
- forking
9. Git 拉去远程分支
# 查看远程分支
git branch -r
# 创建本地分支并关联
git checkout -b 本地分支 origin/远程分支
# 已有本地分支创建关联
git branch --set-upstream-to origin/远程分支名 本地分支名
# 拉取
git pull
# 如果远程没有分支,推送本地分支到远程
git push origin dev:dev
10. git rebase 使用
1)分支合并
# 先checkout 到 feature 分支
$ git checkout feature
$ git rebase master
# 如果有冲突,解决冲突
$ git add <file>
$ git rebase --continue
# 切回原分支
$ git checkout master
$ git merge feature
2)远程分支
$ git pull --rebase
-----------------------------------
$ git pull
$ git reabse
11. Git 设置别名
1)命令设置
git config --global alias.st status
git config --replace-all --global alias.brv "branch --v"
2)配置文件
.gitconfig
[alias]
st = status
cf = config
ck = checkout
fh = fetch
br = branch
brv = branch --v
lg = log
12. Git 对比两分支diff
$ git diff branch1 branch2 --stat
$ git diff branch1 branch2 <file>
$ git diff branch1 branch2
13. Git 对比暂存库和本地库的区别
$ git diff --cached
$ git diff --cached HEAD