Git的简单应用(1)
分布式版本控制系统(DVCS)
在分布式版本控制系统(Distributed Version Control System,DVCS)中,客户端不仅提取最新版本的文件快照,而且也会把代码仓库完整地镜像下来。这样,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。目前,常用的DVCS系统有Git、Mercurial、Bazaar 以及 Darcs 等。
DVCS结构
Git的介绍
主要特点
- 所有操作都是本地执行;
- Git可及时发现在传送过程中信息的丢失或文件的损坏;
- Git保证你提交后的数据不会丢失。
三种状态
- 已修改(modified):文件发生了修改,但尚没保存到数据库中。
- 已暂存(staged):标记已修改文件的当前版本,在下次提交的快照中包含该文件。
- 已提交(committed):文件数据已经安全的保存在本地数据库中。
工作流程
在工作目录中修改文件。
(git add)暂存文件,将文件的快照放入暂存区域。
(git commit)提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。
Git的应用
1.Git的基本配置信息
git config --global user.name "<username>"
git config --global user.email "<email-address>"
完成全局 Git 用户名和 Email 设置。设置后,Git默认采用该用户名和 Email 提交代码。
git config --list
查询当前Git的配置。
2.Git的忽略文件
主要针对工作目录下你不愿意提交的文件,比如你的密码备忘录。
Git 对于 .ignore 配置文件是按行从上到下进行规则匹配的,意味着如果前面的规则匹配的范围更大,则后面的规则将不会生效。下面列举几个常用的配置语法。
在仓库的根目录下,手动创建Git 的 .gitignore 文件。
以斜杠“/”开头表示目录;
以星号“*”通配多个字符;
以问号“?”通配单个字符
以方括号“[]”包含单个字符的匹配列表;
以叹号“!”表示不忽略(跟踪)匹配到的文件或目录。
3.初始化版本库
git init
在当前工作目录默认为本地仓库,初始化Git版本库。
4. 查看仓库状态
git status
查询当前版本库的状态。如果你在本地仓库中更改了任何文件的内容,Git会检测到该文件,并在这里进行状态的显示:
- unstaged: 文件发生更改,但尚未提交。
- untracked: 新创建的文件,尚未被Git进行记录。
- deleted: 文件在本地仓库中被删除,但Git中尚未删减
5. 文件的添加与提交
git add <file-name>
将指定文件添加到Stage暂存区。
git commit -m '<comments>'
将暂存区内的文件提交到Git,并为本次提交添加评论comments。
6. 查看文件的提交记录
git log
查询文件的提交记录。返回每次提交的哈希文件名、提交者、提交日期以及提交者对本次提交的评论。
7. 创建和删除分支
默认情况下,我们会在Master主线上进行工作。但某些情况下,我们需要完成一些自己支线上的任务,并希望不会影响到后续主线任务的开发。这时,你可以在仓库中创建分支用于开发支线任务。支线任务完成后,你也可以选择是否合并到Master上。
git checkout -b <branch-name>
创建并切换到一个新的分支。
git checkout <branch-name>
切换到一个已有的分支。
git branch -l <branch-name>
创建一个新的分支。
git branch -d <branch-name>
删除一个已有的分支。
git branch --list
显示所有的分支以及当前所在分支。
8. 代码重置
某些情况下,你的文件需要恢复到之前的某个指定状态。
- 三种方式
- -mixed:默认方式。回退到之前某版本,只保留源码,回退commit和index信息。
- -soft:回退到之前某版本,只回退了commit的信息,不会恢复到index file一级。
- -hard:彻底回退到之前某版本,本地源码也会变为上一个版本的内容。
- 回退至指定版本
git reset HEAD^ #回退所有内容到上一个版本
git reset HEAD^ a.py #回退a.py这个文件的版本到上一个版本
git reset HEAD~3 #向前回退到第3个版本
git reset –hard origin/master #将本地的状态回退到和远程的一样
git reset 057d #回退到某指定版本
9. 远程管理仓库
git remote add <remote-name> <repository-URL>
在远程服务器URL上添加一个远程仓库<remote-name>。
git remote show <remote-name>
查询指定主机的详细信息。
git remote rm <remote-name>
删除指定的远程主机。
git remote rename <remote-name> <new_remote-name>
修改远程的主机名。
10.推送到远程仓库
git push <remote-name> <local-branch-name> :<remote-branch-name>
将本地分支上的更新,推送到远程主机指定的分支上。
git push -u <remote-name> <local-branch-name>
将本地的分支推送到<local-branch-name>主机,同时指定其为默认主机。
git push --all <remote-name>
将所有本地分支都推送到origin主机。
11.更新与合并
git fetch <remote-name> <local-branch-name>
从远程获取最新版本到本地,但不会自动merge。
git diff <source-branch> <target-branch>
比较<source-branch>分支和<target-branch>分支的差别。(帮你读懂diff)
git merge <branch-name>
合并指定的其他分支到当前分支。
git pull <remote-name> <local-branch-name>
从远程获取最新版本并直接合并到本地。没有fetch+diff+merge组合的安全性高。
12. Rebase
rebase用于把一个分支的修改合并到当前分支。
假设你现在基于远程分支"origin",创建一个叫"mywork"的分支。一段时间后,在origin和mywork两个分支上分别都发生了不同的修改。
git checkout mywork
git rebase origin
你的"mywork"分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到".git/rebase"目录中),然后把"mywork"分支更新 为最新的"origin"分支,最后把保存的这些补丁应用到"mywork"分支上。
13. 克隆仓库
git clone <path-to-clone-repository>
创建一个指定仓库的克隆版。
Reference
充分了解 Git 并入手单人开发 http://www.jianshu.com/p/b238de250c06
Git 学习笔记(初识 Git) http://www.jianshu.com/p/32dcad25b29a
Git版本恢复命令reset http://www.cnblogs.com/0616--ataozhijia/p/3644482.html
https://try.github.io/levels/1/challenges/1
Git远程操作详解 http://www.ruanyifeng.com/blog/2014/06/git_remote.html
git rebase简介(基本篇) http://blog.csdn.net/hudashi/article/details/7664631