git和github一些概念和操作备忘

  1. origin默认是远程仓库

  2. HEAD永远指向当前的commit

  3. 一个branch可以理解为一个commit,也可以理解为从起始commit开始的一条分支, branch可以和master在一条线上,branch也可以另起一条分支,branch可以领先于master也可以落后于master
    所以“”“”branch就是某个commit的一个引用,只是在git log的时候会列出当前路径的所有commit,所以也会看成是一条路径,但是本质上是一个commit的引用”““”“

:::github会默认以master为主分支,但是切记master分支和其他分支是完全等价的,在git看来都是一样的,是平等的。

  1. git log --decorate会显示每一条提交的HEAD, 分支名,tag等 — https://blog.csdn.net/daguanjia11/article/details/73823617

  2. git push之后,在本地origin/master和origin/HEAD会指向当前push的commit位置

  3. 在多人合作的场景下,假如A已经push了一些内容到远程仓库,而A在没有pull的情况下再去push,远程仓库会拒绝这次push,再拒绝了push之后,需要本地先进行git push操作

  4. 假如在git pull的时候远端仓库没有本地的提交,本地也没有远端仓库的提交的时候,git会默认把二者独有的部分进行merge并生成新的commit。git pull的原理就是
    先git fetch 再git merge

  5. origin/master,origin/HEAD这两个和master,HEAD等价,表示的都是引用

  6. 创建branch用 git branch branch1, 切换用git checkout branch1, 创建并切换用git checkout -b branch1, 删除用git branch -d branch1,注意删除branch只是删除了这个引用
    而已,并不会删除这个branch上的任何提交。 注意HEAD指向的branch不能删除。没有合并到master上的branch删除时会失败。

  7. 引用本质上是一个字符串,保存在.git/refs文件夹中,有三种引用分别是refs/heads, 即master和我们创建的引用, 一种是refs/remotes即从远程
    仓库上拉下来的origin/HEAD和origin/master

  8. 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到远程。

  9. 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

  1. 中央式的版本控制是所有人都围绕着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,

  2. 对于一人多任务的情况,可以先将当前的branch打一个未完成todo的tag,再切换到master分支上新建一个新功能的分支,假如有一天想要继续开发旧功能,只需要checkout到旧的分支

  3. 对比暂存区和上一条提交 git diff --staged, 对于工作目录和暂存区 git diff; 对比工作目录和上一条提交 git diff HEAD

  4. 查看最新的commit,git show 相当于 git show HEAD

发布了71 篇原创文章 · 获赞 27 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/github_34777264/article/details/88551024
今日推荐