git设计逻辑

git主要是做版本控制。涉及个人和团队对内容的编辑、管理、共享。

一、概念

1.1 工作目录区【个人】

个人对文件进行修改、编辑,git对该目录没有进行版本控制。

1.2 暂存区【预备提交的内容】

git add 从工作目录去到暂存区。可供选择性的准备提交,把一组更改打包成一个逻辑单元,以便更好地组织历史记录。

1.3 仓库

1.3.1 本地仓库【个人和团队对接】

git commit 更改暂存区的文件会被转移到本地存储区域。形成一个新的提交对象。

1.3.2 远程仓库【团队】

git push 将本地仓库的更改 推送到 远程仓库。

1.3.3 "本地仓库"和"本地仓库的远程跟踪分支"之间的区别

它们是git中两个不同的概念。

本地仓库是项目的主要存储库。用于实际的开发、操作,包括编辑、提交、合并。

本地仓库的远程跟踪分支,是本地仓库的分支,用于跟踪远程仓库的分支。

本地仓库的远程跟踪分支,是只读的,用于存储远程仓库的状态信息,但不能在上面进行直接的编辑或提交。

git push用的是本地仓库

1.4 分支

本地最起码有两个分支。如下。

1.4.1 本地分支(local branch)

本地分支是在本地仓库中创建的分支,用于开发、保存更改、合并等操作。

本地分支值存在于本地仓库中,它们不直接与远程仓库同步。可在本地创建多个分支,进行不同任务的开发。

1.4.2 本地仓库的远程跟踪分支(local remote tracking branch)【反映远程仓库的最新状态】

本地仓库的远程跟踪分支,是本地仓库的分支,用于跟踪远程仓库的分支状态。

本地远程跟踪分支通常以 origin/ 前缀命名,例如 origin/master

git fetch 从远程仓库拉取内容,更新本地仓库的远程跟踪分支以反映远程仓库的最新状态。不影响工作区和暂存区。(更新本地仓库的远程仓库信息)

实际操作:远程仓库拉取分支,通常会将远程分支的内容存储在本地仓库的远程跟踪分支中。然后可以选择将这些更改合并到你的本地分支中。

二、提交及提交历史

2.1 普通提交

git commit 用于创建显示的普通提交,代表一次代码的更改或者提交。

普通提交创建的提交历史是线性的,每个提交都有一个父提交,提交历史相对简单。

2.2 合并提交 git merge

合并提交是合并分支时git自动创建的一个特殊类型的提交。

提交历史会相对复杂。git merge。

2.3 重放提交 git rebase

也有合并,但无合并历史记录。

2.4 提交历史

git rebase和git merge的提交历史不一样。

git rebase重新整理提交历史,创建一个线性的提交历史,无合并历史。

git merge会创建合并提交,产生合并点,保留分支的合并历史,明确的记录信息。

不建议在master分支进行git rebase,因为rebase会重新应用提交历史,导致本地的历史和远程仓库、其他的开发者历史不一样,工作会变的混乱。

2.5 HEAD指针

head是git的一个指针,它指向当前所在本地仓库分支或最新提交(或者说当前分支的"顶端")

即git commit后创建一个新的提交对象后,将它添加到当前分支的分支历史中,并将HEAD更新到新的提交上,以反应当前的位置。

git status 用于显示当前head指针指向的本地仓库分支位置;工作目录区、暂存区的信息,即了解当前工作目录区和本地仓库的状态,进而有效的提交和管理。

二、解读如下操作

1. 案例一

git commit --amend对之前的一个到本地仓库的提交进行修改。git push时,提示之前的那个提交已经废弃。

$ git add build_verify_test.sh
$ git commit --amend
$ git push origin HEAD:refs/for/2d-yf

** [ERROR] 下列commit对应评审已废弃或已合入 (原因分析详见 https://dwz.cn/ushdMKjn ):
         评审号: 109453255, commit: 4e03fbc, 已合入

         [ 请使用以下命令重新提交 ]:
         git fetch
         git reset --soft origin/2d-yf
         git commit -m "您的commit提交说明"
         git push origin HEAD:refs/for/2d-yf

         重提新评审后,对于存在问题的评审,可酌情废弃


<== .)
error: 推送一些引用到 'ssh://icode.baidu.com:8235/baidu/sapd-qa/adh' 失败

解决方案:

想要把这次的提交合并到目前远程的分支提交上。所以

1、先git fetch 把远程仓库的内容下载同步的本地仓库。

2、本地仓库head指针原来git commit --amend的提交上。实际上需要将Head恢复到和远程内容一致的提交上。 git reset --soft origin/2d-yf 即把HEAD指针移动到远程分支origin/2d-yf的位置。--soft参数表示工作目录和暂存区内容都会保留。

3、上面保留了本地暂存区的修改,以及基于远程仓库的修改,git commit重新创建一个提交,从暂存区到本地仓库

4、把本地仓库 git push到远程仓库。

2. 案例二、git push完但没有手动合并,怎么撤回?

实际起作用:

git reset --soft origin/2d-yf && git commit -m “xxxx.   然后再push.

3. 总结:git reset --soft origin/2d-yf作用

作用:

1、移动指针:git reset --soft 将当前的分支的指针,移动到本地仓库的远程跟踪分支'origin/2d-yf'上所指定的提交上。

2、--soft 保存工作区和暂存取。

3、 

此时,可以进一步处理工作目录中的更改,使用git commit提交更改。

将本地仓库的HEAD移动到与远程分支origin/2d-yf一致的提交,但是保留工作目录和暂存区内容。以便进行新的提交或与远程分支进行合并,同时保留本地更改。

4. git pull

git pull是git fetch和git merge或者git pull --rebase两个操作的组合。

git fetch获取远程仓库的最新更改 到 本次仓库的远程跟踪分支上。

git merge将本地仓库的远程跟踪分支合并到本地分支上。

如果合并操作成功,git会自动化创建一个合并提交。

git pull --rebase,将本地提交在远程分支的最新提交上重新应用。不是合并提交,而是重放(rebase)提交。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
JS-Git是一款使用纯JavaScript实现Git客户端和服务器端的开源项目。其主要采用模块化设计,可以运行在任何可以运行JavaScript的平台上。 为什么要使用JavaScript重新实现Git? JavaScript要比其它任何语言都意义深远,它可以运行在笔记本、平板电脑、手机、Chromebook等任何可以运行浏览器的设备上。而Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理,是一款非常棒的工具。 目标平台 该项目的目标是希望它能够在每一个平台上运行,包括: ChromeOS App Firefox OS App Windows RT WinJS App HTML5 Web App(在所有现代浏览器上,包括IE 10) PhoneGap App 桌面Chrome App 以及其它在JavaScript里支持网络访问、持久存储和二进制的应用 功能目标 项目开发者并不打算完全克隆Git的所有功能,其主要目标是保留90%有趣的功能: 通过HTTP、Git或SSH来克隆远程存储库到本地存储 离线制定和提交本地变化 离线管理tag和分支 备份到远程存储仓库 通过HTTP、Git或SSH服务Git仓库 尽量模块化,可以供任何软件使用 让儿童编程 该项目的另一个宗旨是构建一个可以让儿童编程的开发环境,目前,很多年轻人都在玩平板电脑或Chromebook,但并没有什么合理的方式教他们编程,因此,我想改变这种状况并且开发一些工具,让他们可以成为一名非常专业的程序员。 在Chrome App里运行JS-GIT 使用js-git-app测试代码。 把JS-Git作为Node.JS CLI工具使用 该示例使用的应用程序是js-git-node。 该CLI工具能更换Git命令行工具的一个子集。这对基于Node.js的平台非常实用,但它不易安装Git。 介绍内容来自 iteye 标签:JSGit

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值