目录
一.环境配置
二.本地初始化仓库
三.文件的两种状态
四.文件加入暂存区
五.文件提交与删除
1.提交文件
2.删除文件
一.环境配置
当安装Git后首先要做的事情是设置用户名称和email地址。这是非 常重要的,因为每次Git提交都会使用该用户信息。
设置用户信息
右键--》Git Bash Here,然后输入以下命令
查看配置信息
检查当前的设置
注意:
通过上面的命令设置的信息会保存在~/.gitconfig文件中。
二.本地初始化仓库
如果是全新的开始 如果这是你第一次使用Git,那么就先从创建一个全新的目录开始吧。打开终端机窗口,并试着操作以下命令(命令后面的#是说明, 不需要输入):
咱们在一个路径下创建一个测试文件夹,比如起名为git_test(手动创建也行,不用非得用mkdir),然后将Git Bash的命令行路径切换到git_test下,右键git_test文件夹再点Git Bash也一样。
mkdir git_test #创建tmp目录
git init #初始化这个目录让Git对这个目录开始进行版本控制。
小提示:
git init 命令会在上述目录中创建一个名为 .git 的隐藏目录,并在其中创建一个版本库。该目录为文件,查看->显示隐藏目录。整 个Git的精华都集中在这个目录中了,现在不先讲细节,只是体 会一下使用Git的感觉,后续在详细介绍。
三.文件的两种状态
版本控制就是对文件的版本控制,要对文件进行修改、提交等操 作,首先要知道文件当前在什么状态,不然可能会提交了现在还不 想提交的文件,或者要提交的文件没提交上。
注意:
Git不关心文件两个版本之间的具体差别,而是关心文件的整体 是否有改变,若文件被改变,在添加提交时就生成文件新版本的快照,而判断文件整体是否改变的方法就是用SHA-1算法计算文件的校验和。
untracked未跟踪
未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged(即添加到暂存区).
tracked已跟踪
被纳入版本控制
- Unmodified
文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为 Modified,如果使用git rm移出版本库, 则成为Untracked文 件。 - Modified
文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有 两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过,返回unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改。 - Staged
暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存,文件状态为Modified。
注意:
这些文件的状态会随着我们执行Git的命令发生变化
注意:
- 新建文件--->Untracked
- 使用add命令将新建的文件加入到暂存区--->Staged
- 使用commit命令将暂存区的文件提交到本地仓库--->Unmodified
- 如果对Unmodified状态的文件进行修改---> modified
- 如果对Unmodified状态的文件进行remove操作--->Untracked
查看文件状态命令
语法结构:
git status
参数:
-s: 简洁输出
例子
在git_test下创建一个index.html
显示index.html是untracked未跟踪状态。
然后使用git add添加到暂存区(什么都不显示就是Unmodified状态)
然后修改index.html的内容,再查看状态已变为modified
再变回未修改状态(此时还未commit,所以也是暂存状态):
四.文件加入暂存区
文件加入暂存区命令
语法结构
git add 文件名
文件取消暂存区命令
语法结构
git reset 文件名
A代表暂存状态,如果是AM,则是之前是暂存状态,现在是修改状态,如果是??表明是未跟踪状态。
如果想commit到仓库,则要先确保文件是暂存状态,比如如果现在是修改状态,那么现在需要执行git add将文件转变为暂存状态。
下面的这条命令可以把当前目录下的所有未跟踪文件和修改文件都变为暂存状态。
git add .
五.文件提交与删除
1.提交文件
如果仅是通过git add命令把移动加到暂存区,还不算是完成整个流 程。如果想让暂存区的内容永久保存下来,就要使用git commit命令。
文件提交命令
语法结构:
会把本目录下所有为暂存状态的文件都提交到本地仓库。
git commit -m "提交信息"
参数:
- -m : 本次提交做了什么事,只要简单、清楚的文本说明即可,中英文都可以重点是说清楚, 能让自己和别人很快明白就行。
如果不加m参数,会进入类似vim编辑。
修改commit记录
身为程序员,难免会遇到一些不太顺心的客户或项目。心情不好的时候,在代码或Commit信息中“发泄”一下情绪也是很常见的,只是 这要是让客户看见了总是不好解释。
要改动Commit记录有几种方式:
- 把.git目录整个删除(不建议)
- 使用git rebase命令来改动历史记录
- 先把 Commit用git reset命令删除,整理后再重新Commit
- 使用--amend参数改动最后一次的Commit
使用--amend参数进行Commit
查看最近的commit记录
git log --oneline
只需要在Commit命令后面加上--amend即可
git commit --amend -m "welcome to facebook"
2.删除文件
语法结构:
git rm 文件名
注意:
删除的文件只是删除工作目录的文件,我们的版本库里面还是存在的。 删除文件会把这个文件直接放入暂存区。(工作目录,暂存区,版本库之间的关系看看前面的图示)
即用上面的那个命令删除文件时是把文件从工作目录和暂存区全都删除了的,而如果手动删除的话(即我们右键文件选择删除)只会删除工作目录的文件,而不会删除暂存区的文件。
挽救已被删除的文件或目录
“人有失手,马有失蹄”,人总会有不小心或状态不好的时候。不管是有意还是无心
在Git中如果不小心把文件或目录删除了,是可以挽救回来的,这也是使用版本控制系统最主要的原因之一。
这里先使用rm命令,故意把项目中所有的HTML文档删除:
rm *.html
ls -al
可以看出当前1个文件都处于被删除(deleted)状态。 可以使用git checkout命令:
git checkout index.html
注意:
当使用git checkout命令时,Git 会切换到指定的分支,但如果后面接的是文件名或路径,Git则不会切换分支,而是把文件从.git目录中复制一份到当前的工作目录。更精准地说,这个命 令会把暂存区中的内容或文件拿来覆盖工作目录中。
如果想把所有删除文件都挽救回来,可以使用以下命令:
git checkout .
小技巧:
这个技巧不仅可以将删除的文件挽救回来,当改动某个文件后反悔了,也可以用它把文件恢复到上一次Commit的状态。不是所有情况下都能恢复被删除的文件的。因为整个Git的记录都是放在根目录下的 .git目录中,如果这个目录被删除了,也就意味着历史记录也被删除了,那么删除的文件也就不能恢复了。