Git?
Git是一个免费、开源基于分布式架构的代码版本控制工具。
Git!
学习Git必须要了解的有三种状态:
已提交(commited):表示数据安全的保存在本地数据中。
已修改(modified):表示修改了文件,但没有保存到数据库中。
已暂存(staged):表示对修改文件的当前版本做了标记。
学习Git必须要了解的三个工作区域:本地工作目录、暂存区、Git远程仓库。如下图所示:
本地工作目录:对项目的某个版本独立提取出来到本地的目录。
暂存区:它是一个文件,保存了你在本地对项目做的修改的部分。
Git远程仓库:保存项目的元数据的地方,即因特网上面公共的主要仓库。
如上,基本的流程就是:
1.在工作目录中修改文件
2.把修改的文件提交到暂存区
3.将暂存区的文件提交到本地仓库
4.推送,永久性保存到Git远程仓库
Git基础
1.运行Git前的配置
配置账号
安装完Git后第一件事就是设置你的账户名称与邮件地址,因为每一个GIt的提交都会使用这些信息,并且它会写入你的每一次提交中,不可修改:
$ git config --global user.name "xxxx"
$ git config --global user.email xxxx@163.com
检查配置信息
如果要检查你的配置信息,可以使用git config --list
列出所有Git当时能找到的配置。
$ git config --list
user.name=John Doe
user.email=johndoe@example.com
color.status=auto
color.branch=auto
color.interactive=auto
color.diff=auto
...
如果想要查某个key,可以使用git config <key>
$ git config user.name
xxxx
2.获取Git仓库
有两种获取方法:第一种是在现有目录下导入所有文件到Git仓库种;第二种是从一个服务器克隆一个现有的Git仓库。
在现有目录中初始化仓库
在现有的工程目录下:
$ git init
会发现有个隐藏文件.git
目录,这个目录不要改动。
然后,把本地仓库与远程仓库关联:
$ git remote add origin git@github.com:demo.git
$ git push -u origin master
## origin是远程仓库的名字,这是Git默认的
## git@github.com:demo.git 是远程仓库的路径
## $ git push <远程主机名> <本地分支名>:<远程分支名>
## -u 指定origin为默认仓库,以后push就不用加了。
克隆现有的仓库
克隆仓库的命令格式为:git clone [url]
$ git clone https://github.com/demo.git
3.记录每次更新到仓库
检查当前文件状态
$ git status
On branch master
nothing to commit, working directory clean
## 没有修改要提交,默认分支名为master
现在,创建一个新的 README 文件,使用git status
:
$ echo 'My Project' > README
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
README
nothing added to commit but untracked files present (use "git add" to track)
## README 文件出现在 Untracked files 下面,表示在之前到快照中没有这些文件。
跟踪新文件
$ git add README
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: README
## Changes to be committed :表示文件是已暂存状态
如果是下面这样:
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: README
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: HELLO.md
Changes to be committed
表示:工作目录做了修改并且放到了暂存区。
Changes not staged for commit
表示:工作目录做了修改,但没有放到暂存区。
此时需要git add HELLO.md
,在查看状态
$ git add CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: README
modified: CONTRIBUTING.md
状态概览
git status
命令的输出太多了,如果git status -s
命令,可看到一种更紧凑的输出。
$ git status -s
M README
MM Rakefile
A lib/git.rb
M lib/simplegit.rb
?? LICENSE.txt
?? :新添加的还没有添加到暂存区的文件;
A:新添加到暂存区中的文件;
右边的 M :表示该文件被修改了但是还没放入暂存区;
左边的 M :表示该文件被修改了并放入了暂存区;
例如,上面的状态显示: README 在工作区被修改后还没有将文件放入暂存区;lib/simplegit.rb 文件被修改了并放入了暂存区; 而 Rakefile 在工作区被修改并提交到暂存区后,又在工作区中被修改了,所以在暂存区和工作区都有该文件被修改了的记录。
提交更新
每次提交前,先用git status
看下,是不是都暂存起来了 ,然后在用提交命令:
$ git commit -m "fitst commit"
[master 463dc4f] fitst commit
2 files changed, 2 insertions(+)
create mode 100644 README
它会告诉你当前是master
分支提交的,本次提交的SHA-1校验是463dc4f
,本次提交中,有2
个文件修改过,2
行添加过。
移除文件
- 已经全部提交后,在工作目录删除文件后,运行
git status
就会看到做到哪些修改,可以在"Changes not staged for commit"部分看到:
$ rm PROJECTS.md
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: PROJECTS.md
no changes added to commit (use "git add" and/or "git commit -a")
- 如果想要删除暂存区的一些文件,使用
git rm ${file}
命令:
$ git rm PROJECTS.md
rm 'PROJECTS.md'
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: PROJECTS.md
在使用上面的命令删除做过修改并放入暂存区的文件,需要使用-f
参数。用于防止误删还没有添加到快照的数据,这样的数据不能被 Git 恢复。