标签 git 下的文章

Git 学习笔记

0. 概念

工作目录(Working directory):本地可见的文件,没有被 Git 系统所管理。工作目录的内容是你当前看到的,也是最新的。

暂存区/索引区(Stage/Index):存放工作目录中那些你打算提交到版本库的变更,Git 并没有把你所添加的文件放入版本库中,而是对内容进行 hash 后生成了一个编号。相当于告诉 Git,我有一个编号为 xxxxx 的文件将要提交。

本地版本库(Repository/History/HEAD):保存着被提交的各个版本。

远程仓库(Remote Repository):是本地仓库的异地备份。

1. 基本操作

请输入图片描述

查看当前状态
git status

会显示未缓存(未索引)的文件,以及未提交的文件。

添加与提交
git add <file>...
git add *
git commit -m "<comment>"
推送到远程仓库
git push [origin master]

说明:将本地 master 分支推入远端的 origin。

如果本地仓库不是克隆过来的,并欲将你的仓库连接到某个远程服务器,可以使用如下命令为远端仓库添加 orgin:

git remote add origin <server>

如此你就能够将你的改动推送到所添加的服务器上去了。

2. 取消已被 Git 初始化(git init)的目录

删除该目录下 .git 文件夹即可。

3. 撤销本地修改

git checkout -- <filename>

此命令会使用 HEAD 中的最新内容替换掉工作目录中的文件。已添加到暂存区的文件不会受到影响,即不变。(当然,已经提交的文件更不会变。)

对于已缓存的文件,可以先撤销缓存(Unstage),再使用上面的命令来取消修改:

git reset HEAD *
git reset HEAD <filename>

4. 撤销提交

git reset --hard <commit_id>

回退到本地最新版本(或某个指定的版本),本地之前修改的未缓存的都会被覆盖掉。

5. 删除文件&文件重命名

删除文件
git rm <filename>
git rm -r <foldername>

rm 与 add 类似,都是将改动缓存起来,即已经添加到暂存区,下一步需要提交。rm 不仅会在 Git 系统中删除文件,它还会自动将物理文件删除。

文件重命名
git mv <filename> <newfilename>

mv 与 add 类似,也是将改动缓存起来,即已经添加到暂存区,下一步需要提交。mv 不仅会在 Git 系统中重命名文件,还会将物理文件重命名。

6. 补充提交

有时候已经提交了,但发现这次提交不完整,还有修改需要在这一次中提交。在没有推送(PUSH)到远端的情况下可用如下命令补交:

git commit --amend -C HEAD

--amend 是重写提交历史,-C 是重用某次提交的提交信息。

7. 命令别名

git config --global alias.(name) "(command)"

括号部分替换为别名和对应的命令。它实际是将这个设置写入配置文件 .gitconfig,可以使用如下命令查看配置文件:

git config --global --list

例如设置 切换分支 命令的别名:

git config --global alias.co "checkout"

那此后就可以这样来切换分支:

git co branch_x

其中 branch_x 为某分支名称。

8. 删除未跟踪的文件

git clean -df
git clean -f

参数说明:-d 删除未跟踪目录,-f 删除未跟踪的文件。

如果想在删除前查看哪些文件将会被删除,可使用下面的命令:

git clean -dn

参考资料:

图解Git

Git 使用 .gitignore 忽略特殊文件

Git 是非常强大的版本控制与管理工具。在使用的过程中,提交文件时,经常需要忽略某些文件。如编译后的二进制文件。

Git 可以使用 .gitignore 文件来忽略这些文件。在项目根目录下,创建 .gitignore 文件,并写入忽略规则即可。例如 Python 项目,一般需要忽略所有编译后的文件 *.pyc 。如下是一个示例:

.gitignore
*.pyc

忽略规则说明:

1.过滤

忽略整个文件夹中的文件

/tmp/

忽略某个文件

site_settings.py

忽略某类文件,使用通配符

*.pyc

2.不过滤

!*.setting

说明,不过滤是在过滤的相反意思,只要在过滤规则前加叹号 ! ,表示不忽略这些文件(夹)。在 .gitignore 文件中,使用 # 来表示注释。

还可以设置一个全局的忽略文件,就不用在每个项目中都设置该文件。

在 git 的配置文件中设置:

cat ~/.gitconfig
[core]
    excludesfile = ~/.gitignore_global

然后在用户目录中添加文件 .gitignore_global,其内容与上面的一致。