git原理

远程仓库:一般是开源的网站

本地仓库:自己电脑的.git目录,每次commit会存到这里,每次是一个快照,有个commit id。

缓存区:git add添加工作区改动内容到缓存区,准备commit到本地仓库的

工作区:修改添加删除文件的地方,需要提交的内容,可以先git add到缓存区,最后一起commit到本地仓库。

分支(branch)

指向某个快照的指针,分支名就是指针名。哈希值是无法记忆的,分支使得用户可以为快照起别名。而且,分支会自动更新,如果当前分支有新的快照,指针就会自动指向它。比如,master 分支就是有一个叫做 master 指针,它指向的快照就是 master 分支的当前快照。

Git 有一个特殊指针HEAD, 总是指向当前分支的最近一次快照。另外,Git 还提供简写方式,HEAD^指向 HEAD的前一个快照(父节点),HEAD~6则是HEAD之前的第6个快照。

每一个分支指针都是一个文本文件,保存在.git/refs/heads/目录,该文件的内容就是它所指向的快照的二进制对象名(哈希值)。

相关操作:

git会将文件以SHA1 哈希值(长度40的字符串)作为文件名,保存在.git/objects目录,采用HashTable的方式进行查找。

git fetch只是将远程仓库更新拉到本地仓库,这时候不会有冲突,merge的时候才可能会有冲突。

git pull 等于fetch和merge2个操作。

冲突处理:1、用拉取到本地仓库的代码强制覆盖工作区,git checkout head .  (注意: 别遗漏 "head" 后的 " ." 

                  2、git stash丢弃本地修改,然后git pull,然后合并git stash pop,解决冲突。

git reset:

--soft参数告诉Git重置HEAD到另外一个之前的commit,会暂存更改,还可以保留之前内容 来重新提交。

--mixed是reset的默认参数,也就是当你不指定任何参数时的参数。它将重置HEAD到另外一个commit,并且重置index以便和HEAD相匹配,但不会暂存更改。还可以保留之前内容 来重新提交。

--hard参数将会blow out everything.它将重置HEAD返回到另外一个commit(取决于~12的参数),重置index以便反映HEAD的变化,并且重置working copy也使得其完全匹配起来。这是一个比较危险的动作,具有破坏性,数据因此可能会丢失!如果真是发生了数据丢失又希望找回来,那么只有使用:git reflog命令了

git revert:

Git revert用来撤销某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销作为一次最新的提交。git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容。

Git revert和git reset都可以进行版本的回退,将工作区回退到历史的某个状态,二者有如下的区别:

  • git revert是用一次新的commit来回滚之前的commit,而git reset是直接删除指定的commit(并没有真正的删除,通过git reflog可以找回),这是二者最显著的区别;

  • git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容;

Git fork:不是命令,是工作流,大概是复制服务端仓库,合作开发各自提交到自己服务端仓库;(见百度)

Git rebase:衍合,(见百度)

git checkout命令用于切换到某个快照;

git show命令用于展示某个快照的所有代码变动。

 

各个ide关于git的集成操作,和命令差不多, 有一个git history可以查看历史记录、分支和commit情况

 

待研究:不同分支之间的操作,以及不同特殊场景下命令的作用范围?

关于git秘钥配置自行百度。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值