Git

Git学习

最近在项目的开发中由于git操作失误差点儿导致重大错误,因此决定接下来掌握Git,熟悉各个命令使用场景与正确使用。

我们使用git log --oneline --graph --decorate --all 来查看分支节点

avatar

avatar

head指向的就是工作区的内容,

尝试用的git撤销命令

git checkout HEAD 文件名 // 撤销工作区的修改,就是将没有add 也没有commit的时候恢复数据
git status //查看上次提交跟这次提交有啥那些文件发生了更改
git reset HEAD 文件名 
// 将暂存区的内容清空,  注意:这个时候只是撤销了add操作 工作区的内容还是发生了改变
// 要想将工作区的内容回复还要调用git checkout 进行撤销更改。

avatar

我们的Head指向的是当前工作区的内容,我们可以使用

git checkout hash //跳转到历史某个提交状态

例如我们使用git checkout c0

avatar

现在head指向了c0,既不属于main分支也不属于bugFix分支,实现了分离Head

咱们在上图的基础上调用

git branch new

// commit是为了更好看到新创建的分支的指向

git commit

命令

avatar

我们可以了解到当你git branch 的时候head指向的就是分支初始化时指向的节点。

我们来了解一下 rebase命令

git rebase c4

avatar

我们可以看到rebase命令把head指向的节点复制到了c4的下边,注意rebase要求要复制的节点不被包括在目标地点的log中,比如上图:c0,c1都不能复制到c3,c4,c2下边,c2,可以复制到c3,c4下,同理c3,c4可以复制到c2下边。

分支的删除:

git branch -b 分支名字

我们要思考一下删除分支只是删除那个引用,比如我们当前位置的上图,删除bugFix分支只是会将bugFix这个引用删除掉,并不会将这个分支所创建的节点删除。

分支的合并

  1. merge 命令

    git merge 分支名/节点哈希值
    
  2. rebase 命令

    见上文

  3. cherry-pick 命令

avatar

git cherry-pick 节点哈希值
//假设当前分支是master,执行了git cherry-pick C3(哈希值),C4(哈希值)命令后会直接将C3、C4节点抓过来放在后
//面,对应C3'和C4'

总结

不管是HEAD还是分支,它们都只是引用而已,引用+节点是 Git 构成分布式的关键

merge相比于rebase有更明确的时间历史,而rebase会使提交更加线性应当优先使用

通过移动HEAD可以查看每个提交对应的代码

clonefetch都会将远程仓库的所有提交引用保存在本地一份

pull的本质其实就是fetch+merge,也可以加入--rebase通过rebase方式合并

原文地址:https://www.cnblogs.com/FCY-LearningNotes/p/14799756.html