安装可以参考【Git】安装及配置
1 获取 Git 仓库
通常有两种获取 Git 项目仓库的方式:
- 将尚未进行版本控制的本地目录转换为 Git 仓库;
- 从其它服务器 克隆 一个已存在的 Git 仓库。
两种方式都会在本地机器上得到一个工作就绪的 Git 仓库。
1.1 在已存在目录中初始化仓库
如果你有一个尚未进行版本控制的项目目录,想要用 Git 来控制它,那么首先需要进入该项目目录中。 不同系统上的做法不同:
在 Linux 上:
$ cd /home/user/my_project
在 macOS 上:
$ cd /Users/user/my_project
在 Windows 上:
$ cd /c/user/my_project
之后执行:
$ git init
该命令将创建一个名为 .git
的子目录,这个子目录含有初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干。 但在此时,仅仅是做了一个初始化的操作,项目里的文件还没有被跟踪。 可以通过 git add
命令来指定所需的文件来进行追踪,然后执行 git commit
:
$ git add .
$ git commit -m 'initial project version'
1.2 克隆现有的仓库
使用git clone <url>
命令获得一份已经存在了的 Git 仓库的拷贝,默认配置下远程 Git 仓库中的每一个文件的每一个版本都将被拉取下来。比如,要克隆 Git 的链接库 libgit2,并自定义本地仓库的名字为“mylibgit”,可以用下面的命令:
$ git clone https://github.com/libgit2/libgit2 mylibgit
2 记录每次更新到仓库
2.1 记录每次更新到仓库
工作目录下的每一个文件只有以下两种状态:
- 已跟踪: 被纳入了版本控制的文件( Git 已经知道的文件),在上一次快照中有它们的记录,在工作一段时间后, 它们的状态可能是未修改,已修改或已放入暂存区。
- 未跟踪: 除已跟踪文件外的所有文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有被放入暂存区。
编辑过某些文件之后,,Git 将它们标记为已修改文件。 可以选择性地将这些修改过的文件放入暂存区,然后提交所有已暂存的修改。下图描述了文件的状态变化周期:
2.2 检查当前文件状态
可以用 git status
命令查看哪些文件处于什么状态。 在克隆仓库mylibgit
后,没有修改任何文件,使用此命令,会看到类似这样的输出:
$ git status
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
在项目下创建一个新的 README 文件,使用 git status
命令,可以看到一个新的未跟踪文件 README 出现在 Untracked files 下面,且字体为红色:
$ echo 'mylibgit' > README
$ git status
On branch main
Your branch is up to date with 'origin/main'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
README
nothing added to commit but untracked files present (use "git add" to track)
2.3 跟踪新文件
使用命令 git add
开始跟踪一个文件:
$ git add README
此时再运行 git status
命令,会看到 README 文件已被跟踪(绿色字体),并处于暂存状态:
$ git status
On branch main
Your branch is up to date with 'origin/main'.
Changes to be committed: # 只要在 Changes to be committed 这行下面的,就说明是已暂存状态
(use "git restore --staged <file>..." to unstage)
new file: README
2.4 暂存已修改的文件
在README文件添加一行,然后运行 git status 命令,会看到下面内容:
$ git status
On branch main
Your branch is up to date with 'origin/main'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: README
# Changes not staged for commit 这行下面,说明已跟踪文件的内容发生了变化,但还没有放到暂存区
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: README
文件 README 同时出现在暂存区(绿色字体)和非暂存区(红色字体)。Git 只暂存了运行 git add 命令时的版本, 如果现在提交,README的版本是最后一次运行 git add 命令时的那个版本&