Git学习笔记

合集下载

git的文件存储基本原理

git的文件存储基本原理

git的文件存储基本原理Git是一种分布式版本控制系统,用于管理和跟踪文件的修改历史。

它的文件存储基本原理是通过使用哈希算法,将文件内容进行唯一标识,然后将这些标识存储在一个称为对象库的地方。

在Git中,每个文件被视为一个对象,每个对象都有一个唯一的哈希值来标识它。

这个哈希值是通过对文件内容进行SHA-1哈希算法计算得到的。

因为SHA-1算法的特性,即使文件内容只有微小的变化,其哈希值也会完全不同。

这样,每次对文件进行修改后,Git就能够通过比较哈希值来判断文件是否有变化。

Git将每个文件对象存储在一个称为对象库的地方。

对象库是一个存储所有文件对象的地方,它可以位于本地计算机或远程服务器上。

对象库中的对象可以根据哈希值进行快速查找和访问。

当我们对文件进行修改后,Git会创建一个新的文件对象,并将其添加到对象库中。

这个新的文件对象会记录文件的新的哈希值、作者、修改时间等信息。

同时,Git还会创建一个称为提交对象的对象,用于记录这次修改的详细信息,如提交者、提交时间、提交消息等。

提交对象中也包含了指向这个新文件对象的指针,以便能够找到并检索到这个文件对象。

除了文件对象和提交对象,Git还有其他一些对象,如树对象和分支对象。

树对象用于组织文件对象,它类似于一个目录结构,可以将多个文件对象组织成一个树状结构。

分支对象用于标记一个特定的提交对象,以便能够轻松地访问和管理不同版本的文件。

通过使用这些对象,并根据它们之间的关系,Git能够有效地管理和跟踪文件的修改历史。

当我们需要查看文件的历史版本时,Git会根据提交对象之间的指针关系,依次遍历并检索相关的文件对象,然后将文件内容恢复到相应的版本。

这样,我们就能够轻松地查看文件的不同版本,并进行比较和回滚操作。

除了文件存储基本原理,Git还提供了许多其他功能,如分支管理、合并冲突解决、远程仓库同步等。

它的分布式特性使得多人协作更加方便,每个人都可以通过克隆仓库到本地来进行独立的开发和修改。

git总结1

git总结1

git总结1升级了git版本,git clone 的时候报了如下的错误fatal: unable to access 'https:///open-falcon/falcon-plus.git/': SSL connect error百度了好久,试了好多⽅法,最后google到了解决⽅法,特记录下解决⽅法: yum update -y nss curl libcurlgerrit 上查找多个⽤户的提交status:merged project:android/qiku/frameworks branch:QCOM_8976pro_7.x_360OS (owner:yangbinhu OR owner:zengzhigang OR owner:dengweihua OR owner:wangfuquan)====================================================================================================虚拟硬盘MYDROID root ⽤户密码:zzgubuntu root ⽤户密码:123456虚拟机安装配置gerrit过程###################################################### [001] Install virtualbox and init virtual machine1. Install VirtualBox2. Double click MYDROID\MYDROID.vbox to start the VirtualMachine.!!Recommand: free space of your VBox disk is larger than 300G建议系统安装的⼀个虚拟机硬盘上,再创建⼀个虚拟机硬盘挂载到系统中⽤于存放数据。

git的基本命令

git的基本命令

git的基本命令
Git 基本命令:
git init –初始化一个Git仓库
git config –设置Git的配置
git add –将文件添加到版本库
git commit –提交文件到版本库
git status –检查Git的当前状态
git log –显示有关提交的日志信息
git diff –查看提交之间的不同
git show –显示提交的详细信息
git remote –管理远程版本库
git checkout –切换分支或者回退版本
git reset –重置版本库到某个commit
git tag –加标签某个提交
git fetch –从远程仓库获取最新版本
git pull –从远程仓库获取最新版本并自动合并到当前git merge –合并分支到当前分支
git rebase –重新应用已存在的提交
git cherry-pick –选择提交放入当前分支
git blame –检查某行代码是谁提交的
git stash –把当前未完成的工作暂存起来
git revert –恢复版本库到某个commit
git clean - 移除未跟踪的文件
git archive –创建zip/tar文件。

git基本命令

git基本命令
3、引用操作相关命令 命令 简要说明 git check-ref-format 检查引用名称是否符合规范 git for-each-ref 引用迭代器,用于shell编程 git ls-remote 显示远程版本库的引用 git name-rev 将提交ID显示为友好名称 git peek-remote* 过时命令,请使用 git ls-remote git rev-list 显示版本范围 git show-branch 显示分支列表及拓扑关系 git show-ref 显示本地引用 git symbolic-ref 显示或者设置符号引用 git update-ref 更新引用的指向 git verify-tag 校验 GPG 签名的Tag
4、版本库管理相关命令
命令 简要说明 git count-objects 显示松散对象的数量和磁盘占用 git filter-branch 版本库重构 git fsck 对象库完整性检查 git fsck-objects* 同义词,等同于 git fsck git gc 版本库存储优化 git index-pack 从打包文件创建对应的索引文件 git lost-found* 过时,请使用 git fsck –lost-found 命令 git pack-objects 从标准输入读入对象ID,打包到文件 git pack-redundant 查找多余的 pack 文件 git pack-refs 将引用打包到 .git/packed-refs 文件中 git prune 从对象库删除过期对象 git prune-packed 将已经打包的松散对象删除 git relink 为本地版本库中相同的对象建立硬连接 git repack 将版本库未打包的松散对象打包 git show-index 读取包的索引文件,显示打包文件中的内容 git unpack-objects 从打包文件释放文件 git verify-pack 校验对象库打包文件

Git学习文档

Git学习文档

Git学习⽂档#########################################################Study Document for Git#########################################################Git 基础Git ⽂件的三种状态:已提交(committed)、已修改(modified)和已暂存(staged)。

Git ⼯作⽬录的状态:已跟踪和未跟踪。

已提交表⽰数据已经安全的保存在本地数据库中。

已修改表⽰修改了⽂件,但还没保存到数据库中。

已暂存表⽰对⼀个已修改⽂件的当前版本做了标记,使之包含在下次提交的快照中。

基本的 Git ⼯作流程如下:1. 在⼯作⽬录中修改⽂件。

2. 暂存⽂件,将⽂件的快照放⼊暂存区域。

3. 提交更新,找到暂存区域的⽂件,将快照永久性存储到 Git 仓库⽬录。

Git 语法设置 Git 的配置git config --listgit config --global ***git config --global user.email @.comgit helpgit help verbgit verb --help克隆远端仓库git clone url检查当前⽂件状态git status列出当前分⽀和⽂件的状态:已跟踪/未跟踪。

[***@*** deployment]$ git status# On branch master# Untracked files:# (use "git add <file>..." to include in what will be committed)## test.mdnothing added to commit but untracked files present (use "git add" to track)跟踪新⽂件git add file[***@*** deployment]$ git add test.md[***@*** deployment]$ git status# On branch master# Changes to be committed:# (use "git reset HEAD file..." to unstage)## new file: test.md#Changes to be committed: 已暂存状态。

Git学习笔记之(一)使用gitgui从github上下载代码

Git学习笔记之(一)使用gitgui从github上下载代码

Git学习笔记之(⼀)使⽤gitgui从github上下载代码背景:⽬前⼀些开源代码均在 GitHub上管理的,包括⾃⼰写的代码也可以放在上⾯进⾏管理。

但问题是,当你换⼀台电脑,想要将你⾃⼰放在GitHub 上的代码⼯程下载下来的时候,会遇到各种问题,⽬前可以使⽤4种⼯具下载代码,可以使⽤两种不同的⽅式。

内容:1、使⽤ Git Gui 下载代码在官⽹下载 TortoiseGit 和 Git GUI for windows ,下载完成之后,进⾏安装。

图⼀在设定为 git 的⽬录中右键,打开 Git GUI 软件图⼆图三使⽤账号打开GitHub,同时打开⾃⼰的⼯程,在Clone or download 下拉之后,选择 use SSH,拷贝输⼊框中的内容到 Git GUI 界⾯中。

图四此时点击 Clone,会提⽰如下内容:此时应该是SSH-key没有⽣成,需要到 GitHub 上,打开settings ---> SSH and GPG keys ---> 点击右侧的 generating SSH keys,查看官⽅的介绍,如何⽣成SSH key。

⼤致步骤如下:(1) ⾸先检查服务器上否已经安装了 SSH key。

打开 Git Bash执⾏ ls -al ~/.ssh 命令,如下图可以看到以下列出了含有 SSH key的地⽅。

当列表⾥⾯没有数据的时候,此时需要⽣成⼀个新的 SSH key,并添加到 ssh-agent (见操作4)和 Git Hub(见操作3)中。

(2) ⽣成新的 SSH key打开 Git bash ⼯具执⾏ ssh-keygen -t rsa -b 4096 -C "your email@"(3) 将 SSH key添加到 GitHub上直接打开 id_rsa.pub⽂件;将其中的内容拷贝到 GitHub上(setting----> SSH and GPG keys )选择 New SSH key。

git常用语句

git常用语句

git常用语句
1. git init - 创建一个新的本地仓库
2. git clone [URL] - 克隆一个远程仓库到本地
3. git add [文件名] - 将文件添加到暂存区
4. git commit -m "提交信息" - 将暂存区的文件提交到本地仓库
5. git push origin [分支名] - 将本地仓库的文件推送到远程仓库
6. git pull origin [分支名] - 从远程仓库拉取最新的文件到本地仓库
7. git branch - 查看当前分支
8. git branch [分支名] - 创建一个新的分支
9. git checkout [分支名] - 切换到指定的分支
10. git merge [分支名] - 合并指定分支到当前分支
11. git status - 查看当前文件状态
12. git log - 查看提交历史
13. git remote add origin [远程仓库URL] - 添加远程仓库地址
14. git remote -v - 查看当前仓库关联的远程仓库地址
15. git diff - 查看当前文件与上次提交的差异
16. git reset [commit] - 撤销提交
17. git stash - 将当前修改的文件暂存起来
18. git stash pop - 恢复最近一次暂存的文件修改
19. git checkout -- [文件名] - 撤销对文件的修改
20. git remote update origin --prune - 清理远程仓库中已删除的分支信息。

git 原理

git 原理

git 原理
Git是目前最流行的分布式版本控制系统,它的原理十分重要。

Git 的原理是把文件系统的每一次变化都记录下来,以便在任何时刻回滚到之前的状态,并跟踪文件的更改历史记录。

Git的工作原理是把文件系统中的每一个文件都看作一个对象,这些对象可以是一个文件或一个文件夹,每一个对象都有一个唯一的SHA-1哈希值。

当文件或文件夹改变时,Git会根据更改计算出一个新的哈希值,把新的哈希值作为对象的更新标识符,并将其记录在Git仓库中。

Git使用三个主要数据结构:提交对象,树对象和标签对象。

提交对象是Git仓库中最重要的部分,它记录了文件系统的每一次变化,包括改变的文件、作者信息和提交时间等。

树对象记录了文件系统的当前状态,它的每个节点都指向一个提交对象,标签对象指向特定的提交对象,以便在任何时候轻松找到特定的版本。

Git的安全性也很重要,Git的每个提交对象都有一个SHA-1哈希值,该哈希值可以防止文件系统中的任何不安全的更改。

此外,Git 还配备了像GPG签名这样的安全策略,可以确保每次提交只能由授权的开发者提交。

总之,Git的原理是把文件系统中的每一个文件都看作一个对象,
每一个对象都有一个唯一的SHA-1哈希值,这些哈希值可以防止文件系统中的任何不安全的更改,同时Git也使用了一些安全策略,来确保每次提交都是安全可靠的。

git分支原理命令图文解析

git分支原理命令图文解析

本地分支解析git 通过可变指针来实现对提交数据的历史版本的控制,每当我们提交新的更新,当前分支(设为master)则指向最后一个提交更新A,而最后一个提交对象则存在一个指针指向前一次的提交更新Q。

如果我们创建一个新的分支,child,它和master共同指向A,这时,如果我们向child分支提交更新B,我们会发现child 指向B,而master依然指向A。

无论我们在child分支进行了任何开发,只要回到master分支,就能恢复到更新A的数据状态了。

在图片里,我们还注意到有一个head指针,一般来说,它会指向我们目前所在的工作分支。

现在它指向了我们的master分支,意思是master是我们目前的工作分支。

一旦提交更新,就会在master分支上提交。

现在,让我们看看与git 分支有关的操作命令:1. git branch [option] [name]如果不使用任何参数,它可以用来查看所有的分支,而在分支名前有*标记的则为主分支,如果加上name为创建新分支,,如git branch child,则会创建一个名为child 的分支,此外,它有一些常用的参数:2. git checkout [name]切换到对应的分支,对于上图,如果我们是使用git checkout child,我们的head 指针就会指向child分支了。

这时候,如果我们提交新的更新D,我们会发现:我们的D指向C,而C依然指向A,也就是说,以后我们在child分支上做的任何更新,都不会对master分支所在的之路造成任何影响!一旦使用了checkout命令,我们还会发现,不仅head指针会指向新的分支,而且当前工作目录中的文件也会换成了新分支对应的文件了。

此外,我们还可以使用git checkout -b [name]命令,它会新建一个分支,并自动将当前的工作目录切换到该分支上。

3. git merge [name]合并分支,有的时候,我们创建次要分支,可能是为了修改原有程序的bug,或为了拓展新的功能,这时候如果我们想把次要分支的修改何并进主分支中,我们可以使用git merge命令来实现。

git版本管理原理

git版本管理原理

git版本管理原理
Git是一种分布式版本控制系统,它的原理是将代码库复制到本地,然后在本地进行修改和提交,最后再将修改后的代码推送到远程仓库。

Git的版本管理原理可以分为三个部分:工作区、暂存区和版本库。

工作区是指开发者在本地电脑上进行代码修改的地方,也就是我们平时所说的代码目录。

在工作区中,我们可以添加、修改和删除文件,这些操作都是在本地进行的,不会影响到远程仓库。

暂存区是指在提交代码之前,我们需要将修改的文件添加到暂存区,这样才能将修改后的代码提交到版本库。

暂存区的作用是将修改的文件进行分类,方便我们进行版本控制。

在暂存区中,我们可以查看修改的文件,也可以将文件从暂存区中删除。

版本库是指存储代码历史记录的地方,也就是我们所说的Git仓库。

在版本库中,我们可以查看代码的历史记录,包括每次提交的修改内容、提交时间、提交人等信息。

版本库中的代码是经过审核和测试后才能被合并到主分支中的,这样可以保证代码的质量和稳定性。

Git的版本管理原理可以帮助我们更好地管理代码,避免代码冲突和丢失。

通过Git的版本管理原理,我们可以轻松地回滚代码、查看代码历史记录、合并代码等操作,提高了代码的可维护性和可靠性。

同时,Git的分布式版本控制系统也可以让多个开发者同时进行
代码开发,避免了代码冲突和重复开发的问题。

Git的版本管理原理是非常重要的,它可以帮助我们更好地管理代码,提高代码的质量和稳定性。

无论是个人开发还是团队协作,都可以通过Git的版本管理原理来提高代码的效率和质量。

TortoiseGit使用入门教程

TortoiseGit使用入门教程

TortoiseGit入门教程—-参考资料:TortoiseGit帮助文档边城浪子二O一七年元月二十日目录1、关于版本控制 (3)2、TortoiseGit安装: (3)2、TortoiseGit文件夹图标说明: (9)3、克隆远程库 (10)4、对文件进行修改 (13)5、提交更改。

(14)6、push推送变更到库 (18)7、从远程库更新 (19)8、与远程库同步 (20)9、解决冲突 (24)10、TortoiseGitMegar (28)11、查看本地文件与基础文件的差异 (31)12、查看别人的修改 (37)13、查看文件的所有修改者 (40)14、导出某一版本的文件 (41)15、慎用Clean Up (44)16、.gitignore和不需提交的文件 (45)17、附:删除windows凭据 (46)1、关于版本控制版本控制是管理信息修改的艺术,它一直是程序员最重要的工具,程序员经常会花时间作出小的修改,然后又在某一天取消了这些修改,想象一下一个开发者并行工作的团队 - 或许是同时工作在同一个文件!- 你就会明白为什么一个好的系统需要管理潜在的混乱。

这是来自TortoiseSVN文档的一段话,总结得很精辟.TortoiseGit 是一个 Windows 下的版本控制系统Git的客户端工具,正如其名字一样,小乌龟外面有一个壳,TortoiseGit也只是Git一个壳,使您更加方便的使用Git.Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理.版本库就像一个常见的文件服务器,除了它保存你对文件和目录所有的改变。

这一特性使得你可以恢复文件的旧版本并查看历史—谁在什么时间如何进行的修改。

因此也可以说版本控制系统是一种“时间机器”。

TortoiseGit现在有多语言包可以下载,本文档使用英文版进行说明.本文档是以个人经验参考官方文档整理出来的,可能会存在很多问题,如有理解不正确的地方希望能够指出,大家共同学习吧。

Git学习笔记之(二)Gitbash命令介绍

Git学习笔记之(二)Gitbash命令介绍

Git学习笔记之(⼆)Gitbash命令介绍打开 git bash 界⾯,在该界⾯进⾏命令操作。

在你的本地⼯程根⽬录下右键打开 git bash 命令⼯具。

1、git -- help输出命令该命令,回车,可以看到所有git 命令,其也介绍了对应⽤法。

2、git log可以查看该⼯程最新提交的记录。

3、 git diff可以查看本地该⼯程与github该⼯程之间的差异性红⾊表⽰冲突点。

绿⾊表⽰表⽰新增点。

4、git commit(1) 初次提交某个⽂件⾄远程仓库(这⾥均是指同步⾄ GitHub上,以修改了根⽬录下的pom.xml为例)。

a) git commit -i pom.xml -m "修改pom中的依赖数据"该命令表⽰将 pom.xml 提交到本地仓库中,提交的 message为 "修改pom中的依赖数据",其中 -m "message",这个在提交的时候必须写的。

-i xxxx 表⽰提交某个⽂件。

此时回车,出现了如下情况:提⽰需要配置提交账号。

b) git config --gobal "accountname"该命令表⽰配置git的账号名;c) git config --gobal user.email "accoutemail"该命令表⽰配置git的邮箱;d) git commit --amend --reset-author该命令表⽰重置⽤户信息在输⼊ d) 的命令之后,直接进⼊了编辑器⾥⾯,在该编辑器⾥⾯会提⽰本次要提交什么样的内容,同时要求输⼊提交的message。

此时直接输⼊message,之后按 esc 键退出输⼊状态,并按ZZ 返回命令⾏。

命令⾏呈现如下状态;e) git push origin 分⽀名该命令表⽰提交到远程仓库中(2) 本次修改的内容同步⾄远程仓库本地有新增⽂件,需上传⾄远程仓库,先执⾏如下命令:git add ⽂件若是在⼯程⽬录下启动 git bash⼯具的话,这⾥的⽂件填写的路径为相对⼯程⽬录的路径;可以填写多个⽤空格隔开,如:git add 1.txt 2.txtgit commit -i ⽂件 -m "备注"将⽂件提交到本地仓库中, -i 命令表⽰特定的⼏个⽂件,多个⽂件⽤空格隔开,如: git commit -i 1.txt 2.txt -m "提交修改的⽂件"git push 远程服务器分⽀名称将修改的⽂件提交到远程服务器,如: git push origin master 将变更的内容提交到 git 上的主⼲上5、以下是从⽹上找到的命令还未经验证,并实际操作理解⽤途git Bash here从远程仓库更新代码到本地以及上传代码到远程仓库第⼀步:创建分⽀⾸先先在云平台或者github上⾯创建⼀个你的分⽀,⽐如叫做dev-ts-whitelist,第⼀次平台会⾃动帮你从master(主⼲)⾥⾯把代码同步到dev-ts-whitelist分⽀⾥⾯。

git message 语法-概述说明以及解释

git message 语法-概述说明以及解释

git message 语法-概述说明以及解释1.引言1.1 概述概述部分内容:引言部分将介绍本文的主题——"git message 语法"。

Git是一种分布式版本控制系统,它允许多人协同开发,并保留了每一个版本的更改记录。

在使用Git进行版本控制时,我们不仅需要关注代码的改动,还要注意良好的提交信息。

Git message(提交信息)是每次代码提交时,对所做更改的简短描述。

良好的Git message具有重要的意义。

首先,它可以使团队成员更清晰地了解自己以及他人所做的更改,避免项目中被遗忘的改动。

其次,良好的Git message可以提高代码的可读性,便于他人对代码进行理解和维护。

此外,当出现问题需要回溯历史版本时,清晰的Git message可以帮助我们快速定位出错地点和原因。

本文将介绍Git message的常用语法规则,包括合理的提交主题、提交内容的格式要求以及对应的时间戳格式等。

我们将详细探讨每个规则的用途和意义,并给出一些写好Git message的建议和提示。

通过学习和遵守这些语法规则,我们可以提高代码版本控制的效率和代码的可维护性。

总之,良好的Git message语法对于团队协作和项目的管理非常重要。

接下来的文章将深入探讨Git message语法规则以及其重要性,并为大家提供一些写好Git message的实用建议。

通过学习和遵循这些规则,我们可以提高我们的代码版本控制能力,提升团队合作效率和项目质量。

1.2 文章结构文章结构部分的内容如下:文章结构是指整篇文章的组织框架和布局,它决定了文章的逻辑顺序和信息的层次性。

一个合理的文章结构可以使读者更好地理解文章的内容,并能更快地获取所需信息。

通常,一篇文章的结构包括引言、正文和结论三个主要部分。

在引言部分,我们会对文章的主题进行概述,并介绍文章的目的和意义。

这部分内容的目的是引起读者的兴趣并让读者了解文章的背景信息。

git 的常见操作

git 的常见操作

git 的常见操作
以下是git的常见操作:
1. 初始化仓库:使用`git init`命令在当前目录创建一个新的git
仓库。

2. 克隆仓库:使用`git clone`命令克隆一个远程仓库到本地。

3. 添加文件:使用`git add`命令将文件添加到暂存区。

4. 提交更改:使用`git commit`命令将暂存区的更改提交到本
地仓库。

5. 查看仓库状态:使用`git status`命令查看仓库中文件的状态。

6. 查看提交历史:使用`git log`命令查看仓库的提交历史。

7. 创建分支:使用`git branch`命令创建一个新的分支。

8. 切换分支:使用`git checkout`命令切换到另一个分支。

9. 合并分支:使用`git merge`命令将一个分支的更改合并到当
前分支。

10. 拉取远程更新:使用`git pull`命令从远程仓库拉取最新的
更新。

11. 推送更新:使用`git push`命令将本地仓库的更新推送到远
程仓库。

12. 忽略文件:使用`.gitignore`文件来指定要忽略的文件和目录。

13. 撤销更改:使用`git revert`或`git reset`命令撤销之前的提交
或更改。

14. 重置HEAD指针:使用`git reset`命令将HEAD指针移动到
另一个提交。

15. 标签管理:使用`git tag`命令创建、列出和删除标签。

这只是git的一小部分常见操作,git还有很多其他功能和命令可供使用。

git 存储原理

git 存储原理

git 存储原理
Git存储原理是指在Git版本控制系统中,数据是如何存储的。

Git采用了分布式版本控制系统,每个开发者都可以在本地进行代码提交和管理,而不会影响到其他开发者。

Git存储原理是Git 的核心部分,它包括:
1. Git存储的对象
在Git中,所有数据都被存储为对象。

这些对象包括文件和目录,以及Git中的提交、标签和分支等。

每个对象都有一个唯一的SHA-1哈希值,用于确保对象的完整性和唯一性。

2. Git的三种对象类型
Git的对象可以分为三种类型:blob、tree和commit。

Blob对象用来存储文件内容,Tree对象用来存储目录结构,Commit对象则是对文件和目录的一次快照。

每个提交都是一个Commit对象。

3. Git的存储结构
Git的存储结构采用了类似于“数据库”的方式,即将所有对象存储在一个对象库中。

对象库包含了所有Git对象的内容和元数据。

Git对象库中的对象都是不可修改的,因此可以确保系统的完整性和稳定性。

4. Git的压缩机制
为了减小Git对象库的大小,Git采用了一种称为“Delta压缩”的机制。

Delta压缩是指将新对象和旧对象之间的差异进行压缩,从而实现对象的高效存储和传输。

总之,Git存储原理是Git版本控制系统的核心部分,通过分布式存储和Delta压缩等技术,实现了高效的数据存储和管理。

这些技术为Git的高效性和稳定性提供了重要的支持。

git的原理

git的原理

git的原理一、概述Git是一个分布式版本控制系统,它可以记录文件的历史变化,并且可以多人协作开发。

Git最初由Linus Torvalds于2005年开发,目的是为了管理Linux内核的源代码。

随着时间的推移,Git已成为最流行的版本控制系统之一。

二、Git的基本原理1. Git的数据模型Git将文件存储为快照(snapshot),而不是将文件存储为差异(differences)。

每次提交(commit)时,Git会记录所有文件的状态,并生成一个指向该快照的指针(commit object)。

这种方式使得Git非常高效,并且可以轻松地进行分支操作。

2. Git的三个区域在使用Git时,有三个重要区域:工作区(working directory)、暂存区(staging area)和仓库(repository)。

- 工作区:即我们平常所说的项目目录,包含所有文件和子目录。

- 暂存区:也称为索引(index),它是一个中间层,用于暂存所有修改过的文件和目录。

- 仓库:即.git目录,它保存了项目历史记录和元数据。

3. Git对象在Git中,有四种类型的对象:- Blob对象:表示一个文件内容。

- Tree对象:表示一个目录结构。

- Commit对象:表示一次提交操作。

- Tag对象:表示一个标签,可以用于给某个提交打上标记。

这些对象都有唯一的SHA-1哈希值,并且可以通过哈希值来访问它们。

4. Git的分支在Git中,分支是一个指向某个提交的指针。

默认情况下,Git会创建一个名为“master”的分支,它指向最新的提交。

当我们创建新的提交时,Git会自动更新“master”分支指向新的提交。

5. Git的合并在Git中,合并(merge)是将两个或多个分支合并成一个新的分支。

当两个分支有不同的修改时,Git会尝试自动合并这些修改。

如果无法自动合并,则需要手动解决冲突。

三、Git工作流程1. 初始化仓库使用“git init”命令可以将当前目录初始化为一个Git仓库。

Git的原理简介和常用命令

Git的原理简介和常用命令

Git的原理简介和常⽤命令Git和SVN是我们最常⽤的版本控制系(Version Control System, VCS),当然,除了这⼆者之外还有许多其他的VCS,例如早期的CVS 等。

顾名思义,版本控制系统主要就是控制、协调各个版本的⽂档内容的⼀致性,这些⽂档包括但不限于代码⽂件、图⽚⽂件等等。

早期SVN占据了绝⼤部分市场,⽽后来随着Git的出现,越来越多的⼈选择将它作为版本控制⼯具,社区也越来越强⼤。

相较于SVN,最核⼼的区别是Git是分布式的VCS,简⽽⾔之,每⼀个你pull下来的Git仓库都是主仓库的⼀个分布式版本,仓库的内容完全⼀样,⽽SVN则不然,它需要⼀个中央版本库来进⾏集中控制。

采⽤分布式模式的好处便是你不再依赖于⽹络,当有更改需要提交的时候⽽你⼜⽆法连接⽹络时,你只需要把更改提交到本地的Git仓库,最后有⽹络的时候再把本地仓库和远程的主仓库进⾏同步即可。

当然,分布式和⾮分布式各有各的优缺点,但是⽬前来看,分布式的Git正逐渐被越来越多的⼈所接受并推⼴。

本⽂主要对Git的基本原理和常⽤命令进⾏简介,试图从底层来说明Git是如何⼯作的,从⽽帮助⼤家理解上层命令在执⾏的时候背后所产⽣的动作和变化。

原理部分的内容可以参考做进⼀步的了解,⽽常⽤的命令可以参考其他的资料。

本⽂的总结根据⾃⼰的理解进⾏描述,如果错误,请不吝赐教。

Git的基本原理本质上,Git是⼀套内容寻址(content-addressable)⽂件系统,⽽和我们直接接触的Git界⾯,只不过是封装在其之上的⼀个应⽤层。

这个关系颇有点类似于计算机⽹络中应⽤层和下属层的关系。

在Git中,那些和应⽤层相关的命令(也就是我们最常⽤的命令,如git commit、 git push等),我们称之为porcelain命令(瓷器之意,意为成品、⾼级命令);⽽和底层相关的命令(⼏乎不会在⽇常中使⽤,如git hash-object、git update-index等),则称之为plumbing命令(管道之意,是连接git应⽤界⾯和git底层实现的⼀个管道,类似于shell,底层命令)。

git基础操作命令

git基础操作命令

1. git pull 更新服务器代码到本地a). git pull origin master是将origin这个版本库的代码更新到本地的master主分支2. git push 将本地代码提交到服务器3. git log 查看提交信息a). git log -p 查看历次的log信息及更改情况b). git log -p -4 查看距现在最近的4次的log信息及更改情况c). git log frameworks/ 查看关于frameworks/目录修改相关的log信息d). git log --stat 查看log显示文件修改情况e). git log --stat packages/apps/Contacts/ 查看关于packages/apps/Contacts/目录修改相关的log显示的文件修改情况4. git status查看工作目录和代码仓库的改动情况,这个比较重要,可以查看你自己代码哪些需要上传,然后再去add commit5. git diff 查看工作目录和本地仓库的差异或者本地仓库各个版本的差异a). git diff packages/apps/Contacts/AndoridManifest.xml 查看工作目录中AndoridManifest.xml和本地仓库中AndoridManifest.xml的不同b). git diff b46cae3b9a377bcd9cfc249a5778fce647feb961dc94bf29aab18168e79d6496a89e47dba7a1d494 查看这两个版本的不同(git diff history_oldhistory_current)c)git diff84d7c8bf6fde87316f693015d4a541a1adf037b3 b39cf58eea2f7733723ad90d104b83774136efa8 pa ckages/apps/Phone/src/com/android/phone/CallCard.java 查看两个版本之间针对特写文件的变化6. git commit 提交当前修改内容a). git commit file1 file2 -m "log message" 提交file1,file2到本地仓库b). git commit -a -m "log message" 提交所有在Git索引中的改动,所以事先先用git status,看自己代码和服务器的对比有哪些改动,最好不用-a7. git add 增加文件到Git索引a). git add file3 file4将file3,file4加入到Git索引中8. git rm 从Git索引移除文件a). git rm file3 将file3从Git索引中删除9. git branch 对分支的增、删、查操作a). git branch 显示所有本地分支b). git branch new_branch 在当前版本创建一个名为new_branch的分支c). git branch -D new_branch 强制删除名为new_branch的分支10. git checkout 在不同的branch切换和还原文件a). git checkout branch1 切换到branch1分支b). git checkout /packages/apps/Contacts/AndroidManifest.xml 会将AndroidManifest.xml文件从上一次提交的版本更新回来,未提交的部分会全部回滚11. git reset 将当前的工作目录完全回滚到指定的版本号a). git reset [--fixed] 3204f2f0bdfd6ada86c587b8927cdc5a15c586c1 只更新索引,不更新工作目录,也就是说所有的本地文件都不会更新b). git reset [--soft] 3204f2f0bdfd6ada86c587b8927cdc5a15c586c1c). git reset [--hard] 3204f2f0bdfd6ada86c587b8927cdc5a15c586c1 强制回滚到指定版本号,未提交的和此版本之后的更改全部删掉12. git mergea). git merge branch1 将branch1的改动合并到当前所在分支13. git patcha). git format-patch -1 打一个当前提交的补丁,也就是最后一次的提交改动b). git fromat-patch -1 6525c43add803bfee37cf5c1cb573ed8aecf529e 打一个指定具体某一次的补丁c). git format-patch -2 6525c43add803bfee37cf5c1cb573ed8aecf529e 打基于指定具体某个版本的接连两次的补丁15.git reset HEAD^表示回退刚刚的提交, git reset HEAD^^ 表示回退刚两次的提交,以此类推, 补充一下16.git format-patch -1 打印刚刚提交的一版的patch,相当于svn diff17.git show 查看当前提交的版本18.git show ffd98b291e0caa6c33575c1ef465eae661ce40c9 查看指定版本的文件19.git show ffd98b291e0caa6c33575c1ef465eae661ce40c9:filename 查看指定版本的某个文件20.git show 2010-Aug-12 查看指定tag的文件21.git remote show 查看远程仓库的信息22.git remote show origin 查看某个远程仓库的详细信息,比如要看所克隆的origin仓库23.git revert -n hashcode : git撤销某次历史提交; -n 不加的话,相当于撤销后的树状态也提交了,加了-n只是工作树回退了那次提交的内容,工作树处于待提交状态24.git show 9f5202b77bdd33f885207b618b7b2a78b6671813packages/apps/FM/src/com/hymost/fm/ui/FMRadio.java 查看特定版本特定文件的修改25.git diff 6af41d3 d67778 packages/apps/Music/>2.patch这个非常有用, 6af41d3 比d67778 新, 上句这样做的好处是可以产生从6af41d3 到d67778的反向diff ,把这个反向diff 写入2.patch,这样谁打了2.patch,谁就等于作了一次6af41d3 版本在对packages/apps/Music上所做修改的文本回退(如果该版本对这个目录的改动是有错的需要回退的,这是个好办法).回退,千万少用revert和reset ,这两个动作和危险,容易导致结点丢失.Changes to be committed:# (use "git reset HEAD <file>..." to unstage) //reset 加--soft 会保持文件的stage状态,(to be committed,这往往是被撤消的提交中的文件,stage中的文件的修改是diff不出来的), 如果不加(默认:mixed)就会把所有mark to be committed的文件全unstage掉,这时可以diff出来该文件的改动了## modified: packages/apps/Contacts/src/com/android/contacts/ContactsUtils.java //不会被diff出来, ## Changed but not updated: //会被diff出来# (use "git add <file>..." to update what will be committed)# (use "git checkout -- <file>..." to discard changes in working directory)## modified: frameworks/base/core/java/com/android/internal/app/RingtonePickerActivity.java# modified: frameworks/base/media/java/android/media/RingtoneManager.java## Untracked files: //不会参与版本管理,除非用git add进来# (use "git add <file>..." to include in what will be committed)补充一下: reset --hard hashcode就是相当于check out 掉所以从此hashcode之后的所有本地修改了,很危险,慎用.revert hashcode1相当于reset --hard, 不过它的指针不回退,反而是在当前HEAD之上再加一个版本,而该版本在文本上相当于hashcode1之前一个版本的文本内容,但这时候指针都没丢,反而还多了一个,这时候想回过来有办法,就是reset --hard 到HEAD^就行了,一切都回来了,等于什么也没做过.不过尽量不要用revert. 这已经是一个deprecated 命令了.其实对于像1->2->3->4->5,这样的版本链上,如果2->3东西有问题,想回掉这部分修改,却不影响3后面的修改,最好的办法就是不要通过指针来实现,而是通过本文修改来实现新增一个6版本,盖在5之上,我们只要把2->3的patch拿过来,在当前5的基础上,打个反向patch就行: git apply -R 2to3.patch, 这时你的本地代码从文本上就达到了你要想的结果,就是5的状态下把2->3的修改抹掉. 不过打patch有一点要注意,我们尽量不要把png等图片的patch放里头,这样会很慢,图片的二进制码很大. 而且我们可以对patch 进行修改,回退我们想要回退的文件和修改.26. 问题:1->2->3->4->5(本地和服务器上都是这个状态)如果你想把package/app/Contacts从5这个结点的内容恢复到2这个结点,但又想让HEAD指针保持在5上,怎么做?(1)首先,git checkout 78350ad27ed3ad070bc0b5044ec594e70800aded(结点2的hashcode) packages/apps/Contacts/此时,你git log 看到的最新的commit结点会是:commit ba5ca90406bd6aaba3c54c46e9d143829b6a52fb-----结点6Merge branch 'master' of 192.168.10.104:repositories/7x27a-2045这句话到底做了件什么事呢,首先它把packages/apps/Contacts/的内容恢复到2这个结点的状态,然后并最新的内容修改(即恢复后的)做为一个新的结点6来在5的后面提交一个新的结点,所以现在情况变成了:1->2->3->4->5->6(2)但是我们又不想增加新结点,怎么办呢,很简单,只要软reset一下就行,也就是:git reset 5点的hashcode,这样子你再用git diff 就会发现相当于你把package/app/Contacts下面的内容都手动准确地改到了2结点的状态,指针链还是保持在原来的1->2->3->4->5。

Git学习笔记(SourceTree克隆、提交、推送、拉取等)

Git学习笔记(SourceTree克隆、提交、推送、拉取等)

Git学习笔记(SourceTree克隆、提交、推送、拉取等)学习⼀下sourcetree使⽤git⽬录⼀克隆Clone⼆提交Commit和推送Push三拉取pull和获取fetch四版本回退reset五检出checkout六标签Tag⼀从远程库克隆CloneClone就是将远程库的代码拷贝到本地。

填写远程和本地项⽬路径,点击“克隆“。

这样就会将服务器上项⽬代码克隆到本地了。

git -c diff.mnemonicprefix=false -c core.quotepath=false clone --recursive https:///gamedaybyday/HelloGit.git D:\Git\HelloGit Cloning into 'D:\Git\HelloGit'...⼆提交Commit和推送Pushcommit将⼯作空间修改提交到本地库。

push将本地库修改提交到远程库。

新建⼀个test.txt来测试,任意改点什么。

在⽂件状态处可查看,红⾊为删除,蓝⾊为增加部分。

将修改后⽂件由未暂存⽂件,勾选到已暂存⽂件。

选择提交添加修改⽇志。

这⾥如果勾选“⽴即推送变更”则会同时执⾏commit和push。

git -c diff.mnemonicprefix=false -c core.quotepath=false commit -q -F C:\Users\gzy\AppData\Local\Temp\ofkmvj0p.tft这时,修改的代码提交到了本地仓库。

sourcetree会提⽰有修改代码尚未推送到远程库。

选择推送。

将本地仓库推送push到远程库。

git -c diff.mnemonicprefix=false -c core.quotepath=false push -v --tags origin master:master三拉取pull和获取fetchpull 从远程拉取最新版本到本地⾃动合并 mergefetch 从远程获取最新版本到本地不会⾃动合并 merge虚线表⽰拉取到本地仓库实现表⽰拉取到本地仓库,并合并到⼯作空间git -c diff.mnemonicprefix=false -c core.quotepath=false fetch originFrom https:///gamedaybyday/HelloGit9664a7c..42c8f2e master -> origin/mastergit -c diff.mnemonicprefix=false -c core.quotepath=false fetch origingit -c diff.mnemonicprefix=false -c core.quotepath=false pull origin masterFrom https:///gamedaybyday/HelloGit* branch master -> FETCH_HEAD假如有冲突,使⽤解决冲突。

Git使用详细教程

Git使用详细教程

Git使用详细教程Git是一个分布式版本控制系统,用于跟踪文件的变化并协同开发。

本文将为您提供Git的详细使用教程,以帮助您快速上手Git。

一、安装Git二、设置Git```git config --global "Your Name"```这些信息将用于标识您在Git上的操作。

三、创建仓库在使用Git之前,您需要创建一个仓库来存储您的代码。

在终端或命令行界面中,进入您希望创建仓库的目录,并执行以下命令:```git init```这将在当前目录创建一个新的Git仓库。

四、添加文件在仓库中,您需要将文件添加到Git跟踪之下。

在终端或命令行界面中,执行以下命令来添加文件:git add <file>```您可以使用通配符来添加多个文件。

五、提交更改当您对文件进行了修改后,您需要将这些更改提交到Git仓库。

在终端或命令行界面中,执行以下命令来提交更改:``````在提交时,您需要提供一条简短的提交信息,用于描述您的更改。

六、查看历史记录您可以使用以下命令来查看仓库的历史记录:```git log```这将显示提交的历史记录,包括提交者、提交时间和提交信息。

七、创建分支分支是Git的一个重要概念,它允许您在代码的不同版本之间进行切换和并行开发。

在终端或命令行界面中,执行以下命令来创建一个新的分支:git branch <branch-name>```其中,`<branch-name>`是您希望创建的分支名称。

八、切换分支要切换到另一个分支,您可以使用以下命令:```git checkout <branch-name>```其中,`<branch-name>`是您希望切换到的分支名称。

九、合并分支当您完成了一些分支上的开发工作后,您可以将其合并到主分支或其他分支上。

在终端或命令行界面中,切换到目标分支,并执行以下命令来合并分支:```git merge <branch-name>```其中,`<branch-name>`是您希望合并的分支名称。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本节先简单介绍Git的使用与操作, 然后再介绍TortoiseGit 的使用与操作.Git是SVN以后的新一代的版本控制系统/协议. 适合于大规模的开源软件多人协作的开发. 有一个总仓库(如GitHub,CSDN,OSchina等提供), 每个客户端都有一个本地仓库(这个本地仓库有点对应于SVN的服务端仓库), 以及一个可以看见的本地项目.让我们想想,至少需要有哪些功能.以GitHub为例,首先,必须得有一个线上仓库(Repository), 这首先得新建一个仓库.要创建仓库,必须得先注册账号. 请参考: 创建GitHub技术博客全攻略:/renfufei/article/details/37725057然后,登录GitHub, 在右上角找到New Repository 或者加号下拉按钮(+),点击进入新建仓库页面: https:///new, 如下图所示:依次填写仓库名,以及其他信息后,点击"Create repository" 按钮,即可创建一个在线仓库. 因为这个仓库是挂在你的账号下的,所以可以是任意合法的字符,只要和你的其他仓库不冲突即可.仓库创建成功后,就会进入仓库预览页面, 如下图所示:然后,我们可以点击右边的HTTPS 链接, 上方的文本框里面就显示了HTTPS 协议下的仓库访问地址, 可以点进去,全选,也可以点击右边的复制按钮复制到剪贴板. 例如,刚刚创建的项目访问路径是:https:///cncounter/LispGentleIntro.git是一个以https:// 开始,以 .git 结尾的URL,根据提示,叫做clone URL.好了,仓库创建完成,可以进入下一步了.如果你偏爱命令行,那么可以简单参考下这一小节. 否则,请往下翻,直接看TortoiseGit使用与操作2.1 克隆项目(clone ...)Win+R 快捷键打开运行对话框,输入cmd回车, 在cmd 中(其实在GitBash中也可以), cd 切换到存放git项目的目录, 如:[plain]view plain copy1.Microsoft Windows [版本 6.1.7601]2.版权所有 (c) 2009 Microsoft Corporation。

保留所有权利。

3.4.C:\Users\Administrator>F:5.6.F:\>cd GIT_ALL然后执行命令: git clone https:///cncounter/LispGentleIntro.git ,就会把项目克隆到当前目录下, 项目的目录名字默认为 LispGentleIntro.[plain]view plain copy1.F:\GIT_ALL>git clone https:///cncounter/LispGentleIntro.git2.Cloning into 'LispGentleIntro'...3.remote: Counting objects: 5, done.4.remote: Compressing objects: 100% (4/4), done.5.remote: Total 5 (delta 0), reused 0 (delta 0)6.Unpacking objects: 100% (5/5), done.7.Checking connectivity... done.命令行截图如下:2.2 提交项目(commit ...)然后可以cd切换到LispGentleIntro 目录, 新增或者修改某些文件.这里只是模拟一下操作. 实际情况可能是使用Eclipse 导入项目(不要拷贝,Copy...)进行一些编辑, 然后将当前目录下的所有有变动的文件告诉索引库,接着提交到本地仓库.[plain]view plain copy1.F:\GIT_ALL>cd LispGentleIntro2.3.F:\GIT_ALL\LispGentleIntro>echo some content >> cncounter.txt4.5.F:\GIT_ALL\LispGentleIntro>echo by cncounter >> README.md6.7.F:\GIT_ALL\LispGentleIntro>git add .8.9.F:\GIT_ALL\LispGentleIntro>git commit -m "add some info."10.[master 86d090f] add some info.11. 2 files changed, 4 insertions(+)12. create mode 100644 cncounter.txt提交到本地仓库有什么好处呢? 本地仓库就是一个版本管理库,我们在编写代码时,如果写错了,那么可能需要Ctrl+Z 来撤销,撤销撤销,如果很多,而且跨文件,就很麻烦,可能需要Copy文件什么的。

这时候本地仓库就很有用了. 修改到某个阶段,然后就提交到本地仓库. 可以有效防止丢失,方便回退. 而且,提交到本地仓库不会影响别人看到的内容(只有本机可见).2.3 推送项目(push ...)如果完成到一定程度,那么可以推送到远端在线仓库. 推送之前,请确保你已经设置了全局的和user.email, 如果没有设置,或者不想使用全局的信息,可以在当前项目下设置:[plain]view plain copy1.F:\GIT_ALL\LispGentleIntro>git config "renfufei"2.3.F:\GIT_ALL\LispGentleIntro>git config user.email "renfufei@"接着,可以执行推送(push), 推送就是将已经提交到本地仓库的那部分内容给推到远端在线仓库.(修改了,但没提交的那部分内容,不会被推送). 执行git push命令即可:[plain]view plain copy1.F:\GIT_ALL\LispGentleIntro>git pushername for 'https://': renfufei3.Password for 'https://renfufei@':4.Counting objects: 6, done.5.Delta compression using up to 8 threads.pressing objects: 100% (3/3), done.7.Writing objects: 100% (4/4), 402 bytes | 0 bytes/s, done.8.Total 4 (delta 1), reused 0 (delta 0)9.To https:///cncounter/LispGentleIntro.git10. e8c0fb1..6407079 master -> master在连接上远端服务器之后,会要求你输入用户名与密码. 其中,用户名是你注册GitHub时的账号,不是邮箱. 接着是密码,注意密码是没有回显的,也就是为了安全,不告诉你具体输入了几个字符,输入完成回车即可. 截图如下:好了,推送完成,这时候用浏览器打开在线仓库,看看内容是不是已经变了?2.4 拉取项目(pull ...)当然,如果多人协作, 或者多个客户端进行修改, 那么我们还要拉取(Pull ... )别人推送到在线仓库的内容下来。

大神们是不推荐使用pull 命令进行拉取的, 因为封装了细节(git pull == git fetch + git merge). 对于这群更喜欢用命令行的神们来说, 一切在掌控之中是一种强迫症!!!(开个玩笑, 其实项目成员复杂,约定不好以后, pull 确实会有很多问题,会坑人.)常规使用,我们执行git pull即可:[plain]view plain copy1.F:\GIT_ALL\LispGentleIntro>git pull2.Already up-to-date.当然,因为没有其他文件被修改,所以直接提示已经更新到最新. 常规操作就这些,需要注意的是,和使用SVN的好习惯一样,你在修改本地内容之前,最好先pull 一下,减少冲突的可能.使用Git命令有时候确实不怎么方便,特别是每次都要输入密码,如果配置SSH 的方式,又实在是很麻烦.(当然,必须使用Windows 神器才有方便友好的客户端图形界面啦!!!)安装tortoiseGit之前,我们需要先安装程序包,然后安装语言包(LanguagePack). 因为TortoiseGit 只是一个程序壳,必须依赖一个Git Core,也就是上一节我们安装的Git.Git安装与配置下载Git安装包0.TortoiseGit-1.8中文版与Git安装包: /download/renfufei/82046991.首先打开Git 的官方网站: /2.然后找到下载页面: /downloads3.找到Windows版本的下载页面: /download/win4.因为准备使用TortoiseGit做图形客户端,所以就不选择Git GUI 版本. 打开Windows的下载页面后,应该会自动弹出下载框,选择保存即可. 如果没有弹出,可以右键点击页面中的click here to download manually.,选择另存为即可.5.建议将下载好的软件安装包统一分类放到某个目录,如: E:\SOFT_N\Tools_ALL\Git_ALL, 方便以后查找使用.6.文件通过浏览器下载完成后,需要修改文件的锁定属性,特别是.zip文件和.chm文件(否则打开chm会显示404). 右键点击下载的文件,选择属性,然后点击"解除锁定"按钮,确定即可. 如下图所示:去除文件锁定(非必须)7.然后鼠标双击安装文件, 如果有Windows拦截警告,允许即可8.然后出现安装向导界面,点击下一步(Next)即可:安装向导界面9.接着出现授权信息界面,Next即可:授权信息界面10.选择安装路径11.选择文件关联,如果你不清楚,直接默认,下一步即可. 如果你想要右键菜单清爽一点,就把下图中的那个勾给去掉. 这里把所有勾去掉也是可以的,更清爽(我就是这么干的).12.接着出现开始菜单文件夹,默认,下一步即可:13.然后是是否配置Path的配置,选择中间一个,可以通过Windows命令行(CMD)调用git 命令。

相关文档
最新文档