概述
Git
是一个分布式版本控制系统。
Git的功能:
- 跟踪记录项目文件的变更,能够对这些变更进行管理;
- 并行开发,提高协同开发的效率;
分布式:
相比于集中式版本控制系统(例如SVN),Git没有中央服务器,可以把完整的仓库(repository)直接clone到本地,不需要联网工作;但通常也需要像github这样的远程仓库实现在线协作。
安装Git
下载合适的版本安装即可。
https://git-scm.com/downloads
配置
打开 Git Bash,输入:
$ git config --global user.name "NAME"
$ git config --global user.email "hahaha@awsl.com"
上述命令设置了本机的名称和Email地址,因为使用了--global
参数,本机所有的Git仓库都会应用这些设置。
新建仓库
首先,右键打开Git Bash,新建一个目录,比如:
mkdir repo
然后cd进这个目录:
cd repo
在这里新建仓库:
git init
git会在该目录下添加.git目录,它是隐藏的,可以用 ls -ah
看到。
Windows下的操作相对简单:
可以直接在要作为仓库的文件夹下右键 Git Bash Here
。
至此,一个仓库就创建完毕了。
基本操作
使用Git的一个好帮手,就是阅读Git Bash给出的提示,简单介绍以下这些概念能帮助我们理解这些提示的含义。
init 创建出来的目录,比如上面的repo,称为工作目录(working directory),在这里做的任何修改都不会被提交到Branch上。
相应于工作目录,.git目录是仓库(repository),仓库由两部分组成,一个是暂存区(stage),一个则是Git自动创建的master分支。我们所做的修改只有提交到了分支上,才是有效的。
下面是基本命令:
把FILE添加到stage
git add FILE
把stage当前的所有内容提交到分支上,在TEXT中输入对本次修改的描述。
git commit -m "TEXT"
获得当前目录的状态(能给出很有帮助的提示)
git status
下面举几个栗子:
- 比如我对工作目录下的readme.txt做了点修改,并没有用add命令把文件添加到stage。
$ git status
On branch master // 在master分支下
Changes not staged for commit: // 这次更改还没有放进stage (没有被staged)
(use "git add <file>..." to update what will be committed) // 如果要提交更改,那就先 add 后 commit
(use "git restore <file>..." to discard changes in working directory) // 如果要丢弃这些更改,就用这个restore命令来恢复!
modified: readme.txt
no changes added to commit (use "git add" and/or "git commit -a")
如果遵照提示使用 git restore readme.txt
,则会用上一次提交的readme.txt替换掉当前的,从而撤销这次修改。
注意:这种情况下使用git restore命令会直接改变工作目录下的文件。
- 如果我把这次修改add到了stage,再看看提示:
$ git status
On branch master
Changes to be committed: // 更改还没有被commit!
(use "git restore --staged <file>..." to unstage) // 用 git restore 命令把这个更改从stage中扔出去,从而撤销这次修改
modified: readme.txt
这种情况下,使用 restore --staged
仅仅是起到 unstage 作用而已,不会替换工作目录的文件。
我把这次修改用commit提交到了分支上,但是我又反悔了,想要撤销:
首先查看所有之前提交的修改:
git log
进行一次回退:
git reset --hard HEAD^
至此,一切(包括工作区的文件)还原到了上一次commit的时候,仿佛时光倒流。-
这次的修改直接被我 push 到了远程服务器,但是我又又又反悔了,想要撤销。。。
(那可能就凉了)