2020-5-15 Git 基础

Git 基础

1.在CentOS上安装

​ yum install git

2.初次运行 Git 前的配置

​ 设置你的用户名和邮件地址:

git config  --global  user.email  "22222@qq.com"
git  config  --global  user.name  "lisi"

​ 获取git的命令帮助

git  help

3.获取Git仓库

在已存在目录中初始化仓库

如果你有一个尚未进行版本控制的项目目录,想要用 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 内部原理 来了解更多关于到底 .git 文件夹中包含了哪些文件的信息。)

如果在一个已存在文件的文件夹(而非空文件夹)中进行版本控制,你应该开始追踪这些文件并进行初始提交。
可以通过 git add 命令来指定所需的文件来进行追踪,然后执行 git commit :

$ git add *.c
$ git add LICENSE
$ git commit -m 'initial project version'
克隆现有的仓库

克隆仓库的命令是 git clone . 例如

git clone https://github.com/libgit2/libgit2

如果你在克隆的时候想自定义本地仓库的名字,可以

git clone https://github.com/libgit2/libgit2 <mygitname>

记录每次更新到仓库

工作目录下的每一个文件都不外乎这两种状态:已跟踪 或 未跟踪。 已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后, 它们的状态可能是未修改,已修改或已放入暂存区。简而言之,已跟踪的文件就是 Git 已经知道的文件。

工作目录中除已跟踪文件外的其它所有文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有被放
入暂存区。 初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态,因为 Git
刚刚检出了它们, 而你尚未编辑过它们。

编辑过某些文件之后,由于自上次提交后你对它们做了修改,Git 将它们标记为已修改文件。 在工作时,你可以
选择性地将这些修改过的文件放入暂存区,然后提交所有已暂存的修改,如此反复。

检查当前文件状态

可以使用 git status 命令查看哪些文件处于什么状态

跟踪新文件

使用命令 git add 开始跟踪一个文件,然后再运行 git status 命令可以看到被跟踪的文件

如果你修改了一个已被跟踪的文件,此时你运行 git status 会看到这个文件发生了变化,但还没有放到暂存区。

需要使用 git add 来讲它放入暂存区。需要注意的是运行 git add 之后又做了修订的文件,需要重新运行 git add 来把它重新暂存起来

状态简览

git status -s 命令可以得到一种格式更为紧凑的输出

忽略文件

我们可以创建一个名为 .gitignore 的文件,列出并写入要忽略的文件的模式。

cat .gitignore

# 忽略所有的 .a 文件
*.a
# 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
!lib.a
# 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
/TODO
# 忽略任何目录下名为 build 的文件夹
build/
# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf
查看已暂存和未暂存的修改

要查看尚未暂存的文件更新了哪些部分,不加参数直接输入 git diff

若要查看已暂存的将要添加到下次提交里的内容,可以用 git diff --staged 命令。

请注意,git diff 本身只显示尚未暂存的改动,而不是自上次提交以来所做的所有改动。 所以有时候你一下子暂
存了所有更新过的文件,运行 git diff 后却什么也没有,就是这个原因。

提交更新

现在的暂存区已经准备就绪,可以提交了。 在此之前,请务必确认还有什么已修改或新建的文件还没有 git
add 过, 否则提交的时候不会记录这些尚未暂存的变化。 这些已修改但未暂存的文件只会保留在本地磁盘。 所
以,每次准备提交前,先用 git status 看下,你所需要的文件是不是都已暂存起来了, 然后再运行提交命令
git commit:

git commit
跳过使用暂存区域

另外,你也可以在 commit 命令后添加 -m 选项,将提交信息与命令放在同一行,如下所示:

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

git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working
directory)
modified: CONTRIBUTING.md
no changes added to commit (use "git add" and/or "git commit -a")
$ git commit -a -m 'added new benchmarks'
[master 83e38c7] added new benchmarks
1 file changed, 5 insertions(+), 0 deletions(-)git commit -a -m 'added new files'

看到了吗?提交之前不再需要 git add 文件“CONTRIBUTING.md”了。 这是因为 -a 选项使本次提交包含了
所有修改过的文件。 这很方便,但是要小心,有时这个选项会将不需要的文件添加到提交中。

移除文件

如果只是简单的使用 rm filename.txt 来删除文件,运行 git status 时就会在 “Changes not staged for
commit” 部分(也就是 未暂存清单)会看到。再运行 git rm fielname.txtx 以后,下一次提交时,改文件就不再纳入版本管理了。

rm filename.txt
git rm filename.txt

如果要删除之前修改过或已经放到暂存区的文件,则必须使用强制删除选项 -f(译注:即 force 的首字母)。 这是一种安全特性,用于防止误删尚未添加到快照的数据,这样的数据不能被 Git 恢复。

git rm -f filename.txt

另外一种情况是,我们想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录
中。 换句话说,你想让文件保留在磁盘,但是并不想让 Git 继续跟踪。 当你忘记添加 .gitignore 文件,不小
心把一个很大的日志文件或一堆 .a 这样的编译生成文件添加到暂存区时,这一做法尤其有用。 为达到这一目
的,使用 --cached 选项:

$ git rm --cached README

git rm 命令后面可以列出文件或者目录的名字,也可以使用 glob 模式。比如:

$ git rm log/\*.log

注意到星号 * 之前的反斜杠 \, 因为 Git 有它自己的文件模式扩展匹配方式,所以我们不用 shell 来帮忙展开。
此命令删除 log/ 目录下扩展名为 .log 的所有文件。 类似的比如:

$ git rm \*~

改命令会删除所有名字以~结尾的文件。

移动文件

使用 git mv 命令

$ git mv file_from file_to
查看提交历史

使用 git log 命令,不传入任何参数的时候, git log 会按时间先后顺序列出所有的提交。

-p 参数可以帮助我们现在每次提交的差异,-2选项来只显示最近的两次提交,–stat 选项可以显示每次提交的简略统计信息。

另一个非常有用的选项是 --pretty。 这个选项可以使用不同于默认格式的方式展示提交历史。 这个选项有一
些内建的子选项供你使用。 比如 oneline 会将每个提交放在一行显示,在浏览大量的提交时非常有用。 另外还
有 short,full 和 fuller 选项,它们展示信息的格式基本一致,但是详尽程度不一:

$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 changed the version number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test
a11bef06a3f659402fe7563abf99ad00de2209e6 first commit

Table 4. 限制 git log 输出的选项
选项说明
- 仅显示最近的 n 条提交。
–since, --after 仅显示指定时间之后的提交。
–until, --before 仅显示指定时间之前的提交。
–author 仅显示作者匹配指定字符串的提交。
–committer 仅显示提交者匹配指定字符串的提交。
–grep 仅显示提交说明中包含指定字符串的提交。
-S 仅显示添加或删除内容匹配指定字符串的提交。

撤消操作

有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 --amend 选
项的提交命令来重新提交:

$ git commit --amend
取消暂存的文件

可以使用 git reset HEAD … 来取消暂存。

也可以使用 git restore --staged 来取消暂存。

撤消对文件的修改

使用 git checkout – 来撤销之前的修改

远程仓库的使用

查看远程仓库

如果想查看你已经配置的远程仓库服务器,可以运行 git remote 命令。

你也可以指定选项 -v,会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL。

$ git remote -v
origin https://github.com/schacon/ticgit (fetch)
origin https://github.com/schacon/ticgit (push)
添加远程仓库

我们在之前的章节中已经提到并展示了 git clone 命令是如何自行添加远程仓库的, 不过这里将告诉你如何自
己来添加它。 运行 git remote add 添加一个新的远程 Git 仓库,同时指定一个方便
使用的简写:

$ git remote
origin
$ git remote add pb https://github.com/paulboone/ticgit
$ git remote -v
origin https://github.com/schacon/ticgit (fetch)
origin https://github.com/schacon/ticgit (push)
pb https://github.com/paulboone/ticgit (fetch)
pb https://github.com/paulboone/ticgit (push)

现在你可以在命令行中使用字符串 pb 来代替整个 URL。 例如,如果你想拉取 Paul 的仓库中有但你没有的信
息,可以运行 git fetch pb:

$ git fetch pb
remote: Counting objects: 43, done.
remote: Compressing objects: 100% (36/36), done.
remote: Total 43 (delta 10), reused 31 (delta 5)
Unpacking objects: 100% (43/43), done.
From https://github.com/paulboone/ticgit
* [new branch] master -> pb/master
* [new branch] ticgit -> pb/ticgit
推送到远程仓库

使用 git push 命令:

git push origin  master
查看某个远程仓库

如果想要查看某一个远程仓库的更多信息,可以使用 git remote show 命令。

远程仓库的重命名与移除

你可以运行 git remote rename 来修改一个远程仓库的简写名。 例如,想要将 pb 重命名为 paul,可以用
git remote rename 这样做:

$ git remote rename pb paul
$ git remote
origin
paul
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值