Skip to content

经验技巧原则记录

  • 未推送的内容使用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=relative

gitlab 分支管理流程

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

当前引用,始终指向当前工作区所在commit,可以用checkout来挪动。

sh
# 将当前HEAD 挪动到develop 所指的commit上,并切换工作区
git checkout develop
# 切换到349d1ddf的commit上,HEAD -> 349d1ddf, 并切换工作区
git checkout 349d1ddf

merge

分为两种情况,快速合并和新建合并

  • 快速合并是指要合并过来的分支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后的区域 指针都指向版本区

pull和push