分布式版本控制系统DVCS
git就是一个典型的分布式版本控制系统
分布式版本控制系统可以不用联网就可以工作,因为每个人的电脑上都是完整的版本库,当你修改了某个文件后,你只需要将自己的修改推送给别人就可以了。但是,在实际使用分布式版本控制系统的时候,很少直接进行推送修改,而是使用一台当"中央服务器"的东西。这个服务器的作用仅仅是用来方便"交换"大家的修改,没有它大家也一样干活,只是交换修改不方便而已。
git的三种状态
git有三种状态,你的文件可能处于其中之一:
- 已提交(committed): 数据已经安全的保存在本地数据库中
- 已修改(modified): 已修改表示修改文件,但是没有保存到数据库中
- 已暂存(staged):表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中
基本的git工作流程如下:
- 在工作目录中修改文件
- 暂存文件,将文件的快照放入暂存区域
- 提交更新,找到暂存区域的文件,将快照永久性存储到git仓库目录
git使用快速入门
获取git仓库
有两种取得git项目仓库的方法:
- 在现有目录中初始化仓库:进入项目目录运行git init 命令,该命令将创建一个名为.git的子目录
- 从一个服务器克隆一个现有的git仓库:git clone [url] 自定义本地仓库的名字: git clone [url] directoryname
记录每次更新到仓库
- 检测当前文件状态: git status
- 提出更改(把他们添加到暂存区):git add filename(针对特定文件),git add *(所有文件),git add *.txt (支持通配符,所有.txt文件)
- 忽略文件:.gitignore文件
- 提交更新: git commit -m “代码提交信息” (每次准备提交前,先用git status 看下,是不是都已经暂存起来了,然后再运行提交命令 git commit)
- 跳过使用暂存区域更新的方式:git commit -a -m"代码提交信息"。git commit 加上-a 选项,git就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过git add步骤
- 移除文件: git rm filename (从暂存区移除,然后提交)
- 对文件重命名: git mv README.md README(这个命令相当于mv README.md README、git rm README.md、git add README 这三条命令的集合)
一个好的git提交信息
一个好的git提交消息如下:
标题行:用这一行来描述和解释你的这次提交
主体部分可以是很少的几行,来加入更多的细节来解释提交,最好是能给出一些相关的背景或者解释这个提交能修复和解决什么问题。
主体部分当然也可以有几段,但是一定要注意换行和句子不要太长。因为这样在使用 "git log" 的时候会有缩进比较好看。
提交的标题行描述应该尽量的清晰和尽量的一句话概括。这样就方便相关的 Git 日志查看工具显示和其他人的阅读。
推送改动到远程仓库
- 如果你还没有克隆现有仓库,并想将你的仓库连接到某个远程服务器,你可以使用如下命令体添加:git remote add origin ,比如我们要让本地的一个仓库和github上创建一个仓库关联可以这样git remote add origin https://github.com/Snailclimb/test.git
- 将这些改动提交到远端仓库:git push origin master (可以把master换成你想要推送的任何分支)这样就可以将改动推送到所添加的服务器上了
远程仓库的移除与重命名
- 将test重命名为test1: git remote rename test test1
- 移除远程仓库test1:git remote rm test1
查看提交历史
git log 会按提交时间列出所有的更新
可以添加一些参数来查看自己希望看到的内容:
只看某个人的提交记录
git log --author=bob
撤销操作
有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。此时可以运行带有 – amend选项的提交命令尝试重新提交:
git commit --amend
取消暂存的文件
git reset filename
撤销对文件的修改:
git checkout --filename
假如你想丢弃你在本地的所有改动与提交,可以到服务器上获取最新的版本历史,并将你本地分支指向它:
git fetch origin
git reset --hard origin/master
分支
master 分支为默认分支,在其他分支上进行开发,完成后再将他们合并到主分支上
通常在开发新功能,修复一个紧急bug等等时候会选择创建分支。
创建一个名字叫做Test的分支
git branch test
切换当前分支到test,(当你切换分支的时候,Git 会重置你的工作目录,使其看起来像回到了你在那个分支上最后一次提交的样子。 Git 会自动添加、删除、修改文件以确保此时你的工作目录和这个分支最后一次提交时的样子一模一样)
git checkout test
也可以直接创建分支并切换过去
git checkout -b feature_x
切换到主分支
git checkout master
合并分支(可能会有冲突)
git merge test
把新建的分支删掉
git branch -d feature_x
将分支推送到远端仓库(推送成功后其他人可见):
git push origin