[lwptoc]
介绍
什么是 Git
Git 是 Linux 社区为了协作开发 Linux 而开发的一款开源轻量型分布式版本控制系统,以其开源、轻量的优点迅速超越了其他版本控制系统。
Git 能做什么
- 记录文件的修改版本
- 与他人协作修改一些文件
- 整理文件版本(还原、应用修改等)
本文阅读说明
本文通过命令行操作演示 Git 的使用,较为基础。
对于一些基础的 shell 命令不会过多解释。但只要你能完全理解 cd ../..
、ls
之类命令的含义,阅读本文就足够了。
由于终端界面较为简单,所以很少有图片说明,演示输出内容时,以 $
符号开头的行表示输入的命令。(有配图时以图片实际为准)
安装
Windows
下载安装程序 Git for Windows
,按照安装程序的提示即可安装。
Linux/Unix
对于 Linux 来说,不同的发行版使用不同的包管理系统。
Debian/Ubuntu
如果使用的是最新稳定版 Debian/Ubuntu,在终端中输入:
apt-get install git
Alpine
apk add git
Red Hat Enterprise Linux, Oracle Linux, CentOS, Scientific Linux 等
yum install git
RHEL 及其发行版会包含旧版本的 Git,可使用源码安装新版。
MacOS
首先在 AppStore 中安装 Homebrew,然后打开执行:
brew install git
入门
配置账号
按照上文的步骤安装好 Git 后,在系统的终端中就可以使用 git 命令了,对于 Windows 用户,需要使用 Git Bash 应用。
使用 Git 协作时,需要让系统知道是哪个用户提交了代码,使用下面的命令配置提交时使用的用户名与邮箱:
git config --global user.name "用户名"
git config --global user.email "email@example.com"
--global
参数的含义是当前计算机用户的所有仓库都会使用这个配置。
新建一个仓库
mkdir learning-git # 新建文件夹 learning-git
cd learning-git # 将工作目录切换到 learning-git
git init # 初始化仓库
如下图所示:
这样就创建了一个空的仓库,接下来向其中添加文件。
添加并提交文件
让我们编写一个文本文件,保存为 README
,如下图所示:
如果使用 Windows 编辑文件,请保存为 UTF-8 无 BOM 格式。
使用下面的命令将其提交到 Git 中:
git add README
git commit -m "添加 README 说明文件"
运行成功后,会提示:
$ git commit -m "添加 README 说明文件"
[master (root-commit) 6457fc4] 添加 README 说明文件
1 file changed, 1 insertion(+)
create mode 100644 README
如果提示:
$ git commit -m "添加 README 说明文件"
*** Please tell me who you are.
...
fatal: unable to auto-detect email address (got 'gardel@ubuntu.(unknown)')
则表示你没有配置账号,请回到第一步配置账号
提交成功后,输入 git log
即可查看提交历史,如下图所示。
修改文件并再次提交
添加单个修改的文件
接下来随便修改以下 README 文件的内容,然后输入一下 git status
,显示如下信息:
$ git status
On branch master
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
no changes added to commit (use "git add" and/or "git commit -a")
这表示我们修改了一些文件,现在是待添加状态(添加到提交列表),提示我们使用 git add
添加或者使用 git restore
还原,也可以用 git commit -a
提交所有文件。
那么我们输入 git add README
试试:
$ git add README
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: README
可以看到 README 文件已经被加入 commit 列表了。
批量添加修改的文件
所有修改的文件都需要用 git add
添加吗?当然不是,可以用 git add .
快速添加所有修改的文件,也可以使用 git commit -a
直接提交所有修改的文件。
那么如何排除一些不需要上传到版本控制的文件呢?这就要用到 .gitignore
文件了。在此目录下新建一个 .gitignore
文件,内容如下:
*.password
.output
!default.password
其中 *
代表通配,!
代表排除,在 .gitignore
中的排除就代表强制包含(但是不能包含已经排除的目录下的内容)。
现在我们创建 default.password
.output
.password
这三个文件:
$ ls -a
. .. default.password .git .gitignore .output .password README
再执行 git add .
:
$ git add .
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: .gitignore
modified: README
new file: default.password
这样 Git 就按照要求排除了 .output
.password
两个文件。
强制添加与删除
那么使用了 gitignore 后如果我想把某个被忽略的文件强制提交上去呢?可以使用 git add -f
命令,即输入 git add -f .password
。
$ git add -f .password
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: .gitignore
new file: .password
modified: README
new file: default.password
如果要从待提交的列表中删除文件,可以使用 git restore 命令,但是这个命令会回退你的改动,推荐使用 git rm --cached
,如果要删除目录,可以使用 -r
参数,
$ git rm --cached .password
rm '.password'
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: .gitignore
modified: README
new file: default.password
$ ls -a
. .. default.password .git .gitignore .output .password README
移除的文件还留在磁盘上。
git rm
命令通常用于将某些文件加入了 .gitignore
但是没有立即生效的情况。
提交
提交并查看记录:
输入命令:
$ git commit -m "添加 .gitignore 文件"
...
$ git log
...
如图,可见提交记录中多了刚刚提交的记录。
如何删除文件
有两种办法:删除不需要的文件再提交一次,或撤销新建文件的提交(只有在该次提交只有一个新建操作时可用,否则会还原其他所有的修改)。推荐使用第一种,安全可控。
下面新建一个测试文件,并将其提交到版本控制中去。
$ vim delete_me
$ git add .
$ git commit -m "测试删除文件-新建操作"
[master 59f77c9] 测试删除文件-新建操作
1 file changed, 1 insertion(+)
create mode 100644 delete_me
现在删除 delete_me
文件:
$ git rm delete_me
rm 'delete_me'
$ ls -a
. .. default.password .git .gitignore .output .password README
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: delete_me
使用 git rm
命令后,磁盘上的文件也被删除。git rm
的用法与系统命令 rm
非常类似,但是有一个不同的地方是如果加上 --cached
参数,将只删除 Git 仓库中的记录但保留磁盘上的文件,如下。
$ git rm --cached delete_me
rm 'delete_me'
$ ls -a
. .. default.password delete_me .git .gitignore .output .password README
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: delete_me
Untracked files:
(use "git add <file>..." to include in what will be committed)
delete_me
这样之后只需要再提交一次就可以达到删除文件的效果。
近期评论