Git的简单应用(1)

Git

分布式版本控制系统(DVCS)

在分布式版本控制系统(Distributed Version Control System,DVCS)中,客户端不仅提取最新版本的文件快照,而且也会把代码仓库完整地镜像下来。这样,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。目前,常用的DVCS系统有Git、Mercurial、Bazaar 以及 Darcs 等。


DVCS结构

Git的介绍

主要特点

  1. 所有操作都是本地执行;
  2. Git可及时发现在传送过程中信息的丢失或文件的损坏;
  3. Git保证你提交后的数据不会丢失。

三种状态

  1. 已修改(modified):文件发生了修改,但尚没保存到数据库中。
  2. 已暂存(staged):标记已修改文件的当前版本,在下次提交的快照中包含该文件。
  3. 已提交(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 并入手单人开发 //www.greatytc.com/p/b238de250c06
Git 学习笔记(初识 Git) //www.greatytc.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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容