再谈git和github-深入理解
Posted bkylee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了再谈git和github-深入理解相关的知识,希望对你有一定的参考价值。
git中的 objects 和 refs 是什么?
如何理解 HEAD?
如何理解git github的工作过程? 参考: https://www.zhihu.com/question/20070065
为什么git能够回滚到历史记录呢?
- 是因为每一次提交 commit, 就相当于 做了依次 项目/工程的 备份点一样, 每次 提交时 都会生成一个 唯一的 commit id, 一个 hash值
- 所以如同windows 的系统备份点一样, 可以保存多个备份点, 然后你可以选择 随时恢复到 / 回滚到 某个备份点. git的rollback 采用了同样类似的 操作.
linux进程的创建有 : fork(), vfork(), clone() , 跟它们比较近似的一个概念是 复制 copy: 基本上 它们都要涉及到一个类似的过程, 即复制. copy-on-write
关于git github上的 "推拉" 的理解 参考: https://www.zhihu.com/question/21682976
push是推
pull是: 拉, 除了 "拉"之外, 还有: 牵, 拽, 扯, 拔, 拖等动作的意思.
在git中 你要修改别人的东西,(不可能允许你直接修改) 需要走的流程是:
- 不能直接在别人的 主线(master branch 分支) 上直接修改;
- 先fork一份副本 , 然后修改/增删 git commit, 然后把你的这些工作 git pull(requests)请求, 以等待 原作者(主线, 主版本的作者)是否接收采纳, 最后如果原作者 采纳了, 就git merge 把你的工作 "合并" 进去.
确实, 你的行为是push 推送到 原仓库 上去, 但是, 别人要不要采纳你的代码, 决定权在 原作者手里, 所以, 你是要 向原作者 发出一个 "requests"请求, 让原作者 把你的 fixing "拉到 " 他的 master branch 分支上去. 所以 要发起的是 pull requests, 你看那个 图标就知道了.
git 的checkout操作?
checkout n. 两个意思: 1. 检验,校验; 2. 结帐;
The idea must undergo the checkout of experiment. 观念必须经得起实验的 检验。
At the supermarket, Candida chose the shortest checkout line. 在超级市场里, 坎迪德选一条最短的 结账 队来排.
You may take that to the checkout counter, madam, and good luck to ya. 你现在可以去收款处了, 女士, 祝你好运.- git checkout -b newbranch [
git branch
fork和编辑git的过程 参考: http://www.cnblogs.com/hutaoer/archive/2013/05/07/git_checkout.html
- fork是从别人的项目仓库中, 复制一份到你的 github账号仓库中
- 但是你要 用 git clone 从 github的网上仓库中 下载到你的本地机器上, 才好编辑.
- .git/HEAD 是git分支的精髓和关键. 它是一个引用(类似ln链接文件) 目标是: .git/refs/heads/master 文件: 在多个引用refs的 多种头部指针heads/ 的master (即HEAD指向的是master, 然后master 指向的是 最新一次的提交.)
但是 分支通常不只是一个, 可以有多个分支, 因此 .git/refs/heads/ 下就有多个分支的head. 名称就是 分支的名称, 比如: master分支是: refs/heads/master, foo分支是 refs/heads/foo
参考: https://segmentfault.com/a/1190000002783245
这个操作主要会用到两个命令: branch和checkout命令.
创建新分支:git branch branchName
切换到新分支:git checkout branchName
然后,上面两个命令也可以合成为一个命令: (这里的 -b 是 branch的意思)
git checkout -b branchName
以上是关于再谈git和github-深入理解的主要内容,如果未能解决你的问题,请参考以下文章