Appearance
经验技巧原则记录
- 未推送的内容使用reset回退,已推送的内容使用revert回退
- 谨慎使用rebase,建议仅作为本地内容commit的合并
- 使用对commit --amend 对上一次commit信息进行修改,可以把当前暂存区的合并到修改中
下面文件是常用的git 配置
[user]
name = yangjiaxun
email = yangjiaxun@longfor.com
[alias]
lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relativegitlab 分支管理流程
commit理解
git 是由commit组成,commit 记录git每次操作,包括
- commitid(sha-1)
- Author,
- commiter,
- Parent(父commit),
- child(多个下游commit),
- Branches 当前被哪些分支引用
每次commit操作会在当前commit上,添加一个下游commit,同时挪动相关引用。
branch 理解
commit用commit标记,同时可以取一个别名,这个别名就是branch,branch指向某个commit。
sh
# 创建分支
git branch develop
# 删除分支
git branch -d develop如果当前工作区是branch,commit时会挪动branch和HEAD到最新commit,如果当前是在commit上,只会挪动HEAD到最新commit
HEAD
当前引用,始终指向当前工作区所在commit,可以用checkout来挪动。
sh
# 将当前HEAD 挪动到develop 所指的commit上,并切换工作区
git checkout develop
# 切换到349d1ddf的commit上,HEAD -> 349d1ddf, 并切换工作区
git checkout 349d1ddfmerge
分为两种情况,快速合并和新建合并
- 快速合并是指要合并过来的分支commit树包含当前分支commit信息,这个时候直接挪动当前分支到要合并的分支
- 如果不包含,会自动在当前分支新建一个commit。这个commit包含两个分支的diff 信息,然后挪动当前分支到自动创建的commit。
reset
将分支和HEAD挪动位置
sh
# 挪动当前分支到HEAD所在commit
git reset HEAD
# 挪动当前分支到HEAD父commit
git reset HEAD^
# 挪动当前分支到3次父commit
git reset HEAD~3- --soft 将差异内容保存到暂存区
- --hard 清空当前工作区和暂存区内容
- 不加参数,将差异保存在工作区
也可以对文件进行操作,删除暂存区内容
checkout
针对文件时,是操作工作区内容和版本区一致
工作区、暂存区和版本区
- 工作区 ->当前文件系统所拥有的状态
- 暂存区 ->add后添加到到内容
- 版本区 ->commit后的区域 指针都指向版本区
