-
origin默认是远程仓库
-
HEAD永远指向当前的commit
-
一个branch可以理解为一个commit,也可以理解为从起始commit开始的一条分支, branch可以和master在一条线上,branch也可以另起一条分支,branch可以领先于master也可以落后于master
所以“”“”branch就是某个commit的一个引用,只是在git log的时候会列出当前路径的所有commit,所以也会看成是一条路径,但是本质上是一个commit的引用”““”“
:::github会默认以master为主分支,但是切记master分支和其他分支是完全等价的,在git看来都是一样的,是平等的。
-
git log --decorate会显示每一条提交的HEAD, 分支名,tag等 — https://blog.csdn.net/daguanjia11/article/details/73823617
-
git push之后,在本地origin/master和origin/HEAD会指向当前push的commit位置
-
在多人合作的场景下,假如A已经push了一些内容到远程仓库,而A在没有pull的情况下再去push,远程仓库会拒绝这次push,再拒绝了push之后,需要本地先进行git push操作
-
假如在git pull的时候远端仓库没有本地的提交,本地也没有远端仓库的提交的时候,git会默认把二者独有的部分进行merge并生成新的commit。git pull的原理就是
先git fetch 再git merge -
origin/master,origin/HEAD这两个和master,HEAD等价,表示的都是引用
-
创建branch用 git branch branch1, 切换用git checkout branch1, 创建并切换用git checkout -b branch1, 删除用git branch -d branch1,注意删除branch只是删除了这个引用
而已,并不会删除这个branch上的任何提交。 注意HEAD指向的branch不能删除。没有合并到master上的branch删除时会失败。 -
引用本质上是一个字符串,保存在.git/refs文件夹中,有三种引用分别是refs/heads, 即master和我们创建的引用, 一种是refs/remotes即从远程
仓库上拉下来的origin/HEAD和origin/master -
push的本质上把当前branch指向的commit位置连同他的路径一并上传到远端仓库,假如本地branch是master则只需要git push,假如是其他的branch
例如branch1,则需要先checkout到分支branch1,再使用命令 git push origin branch1, origin代表默认的远程仓库,branch1是当前的commit及其路径。
且push完branch1之后,虽然本地仓库的HEAD指向的是branch1,但是远程仓库的HEAD还是指向master。因为push操作并不是推送HEAD到远程。 -
pull包含两步,先fetch再merge, merge操作的本质是:从目标commit和当前commit分叉的位置起把目标commit的路径上所有的内容一并应用到当前commit
然后在自动生成一个新的commit,它会存在两种冲突
12.1 假如修改了不同的文件,则merge后两个文件都被修改。假如修改了同一个文件的不同行,则合并后两个行都被修改。这都是自动完成的。
但是假如修改的是同一文件的同一内容,则会发生git不可控制的错误,这时需要手动处理这个冲突的区域(git会把冲突的commit都列出来),再手动commit一下即可。也可以防锈merge, 用git merge --abort
12.2 假如HEAD领先于目标commit,这时merge审核也不会做。假如HEAD落后于commit,则直接fast-forward.fast-forward是实际开发中的经典情形,指一方提交,一方没有提交的情况。
git pull 的完整内容是 git fetch + get merge origin/HEAD. 因为第二步得到的branch是origin/HEAD
-
中央式的版本控制是所有人都围绕着master分支开发,只有开发完毕才能看到别人的代码,这给代码共享和review带来了极不便。
最流行的工作流 Feature branching,核心内容是两点:
13.1. 任何新的功能(Feature)或者bug修复全都新建一个branch来写;
13.2. branch写完后合并到master,然后删掉这个branch这样的话可以在开发完feature1之后先把feature1push到远程,请别人review过了之后再本地merge,本地和远程都删除feature1分支
github将这个过程做了简化,即你先fork中央仓库到你的账号下,然后将本地仓库pull到你的电脑再新建branch做修改,做了修改之后将这个branch分支pull到你的仓库。然后新建一个pull request,
中央仓库的人员看到这个pull request之后会假如没有问题会merge你的branch, -
对于一人多任务的情况,可以先将当前的branch打一个未完成todo的tag,再切换到master分支上新建一个新功能的分支,假如有一天想要继续开发旧功能,只需要checkout到旧的分支
-
对比暂存区和上一条提交 git diff --staged, 对于工作目录和暂存区 git diff; 对比工作目录和上一条提交 git diff HEAD
-
查看最新的commit,git show 相当于 git show HEAD