版本控制(2) | 青训营笔记

48 阅读5分钟

 Git 本地 操作

Git简史

Git是目前世界上最先进的分布式版本控制系统。同生活中的许多伟大事件一样,Git 诞生于一个极富纷争大举创新的年代。Linux 内核开源项目有着为数众广的参与者。绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。到 2002 年,整个项目组开始启用分布式版本控制系统 BitKeeper 来管理和维护代码。

到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了免费使用 BitKeeper 的权力。这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds )不得不吸取教训,只有开发一套属于自己的版本控制系统才不至于重蹈覆辙。他们对新的系统制订了若干目标:

分支切换速度快 容量小(压缩) 简单的设计 全分布式

对非线性开发模式的强力支持(允许上千个并行开发的分支)

有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)

自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。它的速度飞快,极其适合管理大项目,它还有着令人难以置信的非线性分支管理系统可以应付各种复杂的项目开发需求。

Git 初始化配置

一般在新的系统上,我们都需要先配置下自己的 Git 工作环境。

Git 提供了一个叫做 git config 的命令来配置或读取相应的工作环境变量

~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。

 

 

  配置内容

用户信息

第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录:

$ git config --global user.name "zahngzhuo

$ git config --global user.email "<@example.com>"

 

要检查已有的配置信息,可以使用 git config --list 命令

删除配置信息git config --global --unset user.email

 Git 基本 的本地 操作

 暂存新文件

命令:git add 文件名(README.txt)

作用:跟踪一个新文件

运行 git status 命令,会看到 README 文件已被跟踪,并处于暂存状态:

Changes to be committed:

  (use "git reset HEAD ..." to unstage)

        new file:   README

只要在 “Changes to be committed” 这行下面的,就说明是已暂存状态。如果此时提交,那么该文件此时此刻的版本将被留存在历史记录中。在 git add 后面可以指明要跟踪的文件或目录路径。如果是目录的话,就说明要递归跟踪该目录下的所有文件。

 

 

暂存已修改文件

现在README文件都已暂存,下次提交时就会一并记录到仓库。假设此时,你想要在 README里再加条注释,重新编辑存盘后,准备好提交。不过且慢,再运行 git status 看看:$ git status

On branch master

Changes to be committed:

  (use "git reset HEAD ..." to unstage)

        new file:   README

Changes not staged for commit:

  (use "git add ..." to update what will be committed)

  (use "git checkout -- ..." to discard changes in working directory)

        modified:   README

README 文件出现了两次!一次算已修改,一次算已暂存,这怎么可能呢?好吧,实际上 Git 只不过暂存了你运行 git add 命令时的版本,如果现在提交,那么提交的是添加注释前的版本,而非当前工作目录中的版本。所以,运行了 git add 之后又作了修订的文件,需要重新运行 git add把最新版本重新暂存起来:

gitaddREADME ;git add README ; git status

On branch master

Changes to be committed:

  (use "git reset HEAD ..." to unstage)

        new file:   README

查看已暂存和未暂存的更新

实际上 git status 的显示比较简单,仅仅是列出了修改过的文件,如果要查看具体修改了什么地方,可以用 git diff 命令.这个命令它已经能解决我们两个问题了:当前做的哪些更新还没有暂存?有哪些更新已经暂存起来准备好了下次提交?

1. 当前做的哪些更新还没有暂存?

命令:git diff(不加参数直接输入 git diff)

2. 有哪些更新已经暂存起来准备好了下次提交?

命令: git diff –cached  或者  git diff –staged(1.6.1以上)

 提交更新

当暂存区域已经准备妥当可以提交时,在此之前,请一定要确认还有什么修改过的或新建的文件还没有 git add 过,否则提交的时候不会记录这些还没暂存起来的变化。所以,每次准备提交前,先用 git status 看下,是不是都已暂存起来了,然后再运行提交命令 git commit

命令:git commit

注意:这种方式会启动文本编辑器以便输入本次提交的说明

默认的提交消息包含最后一次运行 git status 的输出,放在注释行里,另外开头还有一空行,供你输入提交说明。你完全可以去掉这些注释行,不过留着也没关系,多少能帮你回想起这次更新的内容有哪些。

另外也可以用 -m 参数后跟提交说明的方式,在一行命令中提交更新:

命令:git commit –m “message xxx”

 

跳过使用暂存区域

尽管使用暂存区域的方式可以精心准备要提交的细节,但有时候这么做略显繁琐。Git 提供了一个跳过使用暂存区域的方式,只要在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤

git commit -a –m “message xxx”

 

移除文件

要从 Git 中移除某个文件,就必须要从已跟踪文件清单中注册删除(确切地说,是在暂存区域注册删除),然后提交。可以用 git rm 命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。

1. 从工作目录中手工删除文件

2. 再运行 git add记录此次移除文件的操作

3. 最后提交的时候,该文件就不再纳入版本管理了

文件改名

git mv file.from file.to

其实,运行 git mv 就相当于运行了下面三条命令:

$ mv README.txt README

$ git rm README.txt

$ git add README

查看历史记录

git log

在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的工具是 git log 命令

$ git log

commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7

Author: Scott Chacon <@gee-mail.com>

Date:   Sat Mar 15 16:40:33 2008 -0700

    removed unnecessary test

commit a11bef06a3f659402fe7563abf99ad00de2209e6

Author: Scott Chacon <@gee-mail.com>

Date:   Sat Mar 15 10:31:28 2008 -0700

    first commit

默认不用任何参数的话,git log 会按提交时间列出所有的更新,最近的更新排在最上面。 正如你所看到的,这个命令会列出每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明。

git log参数

git log --pretty=oneline

git log --oneline

git log --oneline --decorate --graph --all

心得体会: 作为学习Git基本本地操作的心得体会,我觉得以下几点很重要:

  1. 学会常用的命令:包括git init、git add、git commit、git status等常见操作。
  2. 熟练掌握分支管理:使用git branch和git checkout等命令,对不同的代码版本进行管理。
  3. 注意文件状态:需要时刻关注自己的代码库中文件的状态,包括已经修改但未提交,已经暂存但未提交等。
  4. 了解Git的工作流程:理解Git是如何进行提交、回滚等操作的。
  5. 多练习:通过实践去熟悉Git的操作,比如尝试创建分支并合并等操作。

最后,希望一定要时刻注意代码的版本控制和备份,避免因为Git使用不当而导致代码丢失或无法恢复的情况。