【Git】原理及使用(一)
Git基本操作
创建git本地仓库
仓库是进行版本控制的一个文件目录,即Git 仓库是一个被 Git 管理起来的文件夹。Git 会记录这个文件夹里文件的新增、修改、删除历史。
我们要想对⽂件进⾏版本控制,就必须先创建
⼀个仓库出来。
创建⼀个 Git 本地仓库对应的命令为 git init ,注意命令要在⽂件⽬录下执行:
配置git
当安装Git后首先要做的事情是设置你的用户名称和e-mail地址。命令为:
git config [--global] user.name "Your Name"
git config [--global] user.email "email@example.com"
其中 --global 是一个可选项。如果使用了该选项,表示这台机器上所有的 Git 仓库都会使用这个配置。如果你希望在不同仓库中使用不同的 name 或 e-mail,可以不要 --global 选项,但要注意的是,执行命令时必须要在仓库里。
查看配置命令为:
git config -l
删除对应的配置命令为:
git config [--global] --unset user.name
git config [--global] --unset user.email
认识工作区、暂存区、版本库
工作区:在电脑上你要写代码或文件的目录。
暂存区:一般存放在.git目录下的index文件中,我们把暂存区有时也叫索引。
版本库:又叫仓库,英文名repository。.git目录不算工作区,而是Git的版本库。版本库里所有文件都可以被Git管理起来,每个文件的修改,删除Git都能跟踪,以便任何时刻都能追踪历史,或者在将来某个时刻“还原”。
在创建 Git 版本库时,Git 会为我们自动创建一个唯一的 master 分支,以及指向 master 的一个指针叫 HEAD。
当对工作区修改(或新增)的文件执行 git add 命令时,暂存区目录树的文件索引会被更新。
当执行提交操作 git commit 时,master 分支会做相应的更新,可以简单理解为暂存区的目录树才会被真正写到版本库中。
由上述描述我们便能得知:通过新建或粘贴进目录的文件,并不能称之为向仓库中新增文件,而只是在工作区新增了文件。必须要通过使用 git add 和 git commit 命令才能将文件添加到仓库中进行管理!
添加文件
使用 git add 命令可以将文件添加到暂存区:
- 添加一个或多个文件到暂存区:git add [file1] [file2] …
- 添加指定目录到暂存区,包括子目录:git add [dir]
- 添加当前目录下的所有文件改动到暂存区:git add .
再使用 git commit 命令将暂存区内容添加到本地仓库中:
- 提交暂存区全部内容到本地仓库中:git commit -m “message”
- 提交暂存区的指定文件到仓库区:git commit
[file1] [file2] … -m “message”
注意 git commit 后面的 -m 选项,要跟上描述本次提交的 message,由用户自己完成,这部分内容不能省略,要好好描述,是用来记录你的提交细节,是给我们程序员看的。
例如:
git commit 命令执行成功后会告诉我们,1个文件被改动(就是我们新添加的ReadMe文件),插入了两行内容(ReadMe有两行内容)。
我们还可以多次 add 不同的文件,而只 commit 一次便可以提交所有文件,是因为需要提交的文件是通通被 add 到暂存区中,然后一次性 commit`暂存区的所有修改。
目前为止,我们已经更够将代码直接提交⾄本地仓库了。我们可以使用 git log 命令,来查看
下历史提交记录:
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上 --pretty=oneline 参数:
我们看到的一大串的字符串的是每次提交的 commit id(版本号),Git 的 commit id 不是1,2,3……递增的数字,而是一个 SHA1(一种密码学哈希函数) 计算出来的一个非常大的数字,用十六进制表示。
查看.git文件
index 是我们的暂存区,add后的内容都是添加到这⾥的。 HEAD 就是我们的默认指向master分⽀的指针:
128b11612c0c11b5c17502c44b5d624a6b6d947f就是当前最新的commit id.
objects 为 Git 的对象库,里面包含了创建的各种版本库对象及内容。当执行 git add 命令
时,暂存区的目录树被更新,同时⼯作区修改(或新增)的文件内容被写入到对象库中的⼀个新的对象中,就位于 “.git/objects” ⽬录下,让我们看看这些对象有何⽤处:
查找 object 时要将 commit id 分成2部分,其前2位是文件夹名称,后38位是文件名称。
找到这个commit id之后,⼀般不能直接看到里面是什么,该类文件是经过 安全哈希算法加密过的
文件,好在我们可以使用 git cat-file 命令来查看版本库对象的内容:
用同样的方法看看上图中tree里的内容:
看看上图中ReadMe里的内容:
总结:
index:暂存区,git add后会更新该内容。
HEAD:默认指向master分支的一个指针。
refs/heads/master:文件里保存着当前master分支的最新commit id.
objects:包含了创建的各种版本库对象及内容,可以简单理解为放了 git 维护的所有修改。
修改文件
Git ⽐其他版本控制系统设计得优秀,因为 Git 跟踪并管理的是修改,而非文件。
我们先再次修改ReadMe文件:
此时,仓库中的ReadMe和我们工作区的ReadMe是不同的,如何查看当前仓库的状态呢?git status命令用于查看在你上次提交之后是否有对文件进行再次修改。
上⾯的结果告诉我们,ReadMe 被修改过了,但还没有完成添加与提交。⽬前,我们只知道文件被修改了,如果能知道具体哪些地⽅被修改了,就更好了。
git diff [file] 命令用来显示暂存区和工作区文件的差异,显示的格式正是Unix通用的diff格式。也可以使用 git diff HEAD – [file] 命令来查看版本库和工作区文件的区别。
知道了对 ReadMe 做了什么修改后,再把它提交到本地仓库就放心多了。

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)