Git 的基本操作

Git 是一个以命令行为主的免费开源的分布式版本控制系统,用于敏捷高效的处理任何或大或小的项目。是Linus Torvalds 为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。常见的CVS,SVN等都是集中式的版本控制系统。


git

版本控制系统:集中式vs分布式

集中式版本控制系统,版本库是集中存放在中央服务器的,修改项目时需要先从中央服务器取得最新版本,然后修改,再将修改后的版本提交到中央服务器上。


集中式版本控制系统

集中式版本控制系统有很多好处,比如管理员可以充分了解每个开发者的进度,但也有以下问题:第一,需要联网工作,在网速不好的环境下效率非常地下;第二,若中央服务器发生故障,整个项目有可能会丢失所有历史更新记录。

而分布式版本控制系统则不同,没有中央服务器,每个人都是一个完整的版本库,因此工作时不需要联网,只要在需要时将修改推送即可,因此安全系数也高很多,某一人的电脑发生故障并不会影响整个项目,其他人电脑中也有。


分布式版本控制系统

Linux上安装Git

  1. 在终端输入git,看系统是否安装Git
  2. 若终端显示为

$ gitThe program 'git' is currently not installed. You can install it by typing:sudo apt-get install git

则没有安装,通过指令sudo apt-get install git 完成Git的安装

常用Git操作

  • 配置Git基本信息:git config
  • 添加Git忽略文件:.gitignore
  • 创建版本库:git init
  • 创建和删除分支:git branch
  • 切换到某个分支:git checkout
  • 查看仓库的状态:git status
  • 把某个文件添加到git暂存区域:git add
  • 把暂存区域的内容提交到本地仓库:git commit
  • 查看修改内容:git diff
  • 重置代码:git reset
  • 把本地仓库推送到远程仓库:git push
  • 把远程仓库clone到本地:git clone
  • 把远程代码拉到本地:git pull
  • rebase: git rebase

1、配置Git 基本信息

git config --global user.name "<username>"
git config --global user.email "<email>"

配置全局Git的用户名和邮箱设置,之后每一次Git的提交都会使用这些信息,也可通过以下命令查询当前Git的配置

git config --list
配置git基本信息

2、添加Git忽略文件

有些在Git工作目录中的文件比较重要或个人,不能提交他们,可以在Git工作区的根目录下创建一个特殊的.gitignore文件,然后将要忽略的文件名填进去,Git就会自动忽略这些文件。.gitignore 文件一般不存在,需要仓库根目录下手动创建,并且可以对 .gitignore 做版本管理。

忽略文件的原则:
(1)忽略操作系统自动生成的文件,比如缩略图等;
(2)忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
(3)忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。

Git 对于 .ignore 配置文件是按行从上到下进行规则匹配的,意味着如果前面的规则匹配的范围更大,则后面的规则将不会生效。下面列举几个常用的配置语法。
(1)以斜杠“/”开头表示目录;
(2)以星号“*”通配多个字符;
(3)以问号“?”通配单个字符
(4)以方括号“[]”包含单个字符的匹配列表;
(5)以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;

3、创建版本库/仓库

版本库,又叫仓库,可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

第一步,创建一个空目录

mkdir <repository_name>
cd <repository_name>

第二步,通过git init命令把这个目录变成Git可以管理的仓库

成功创建空仓库

此时,空仓库就创建好了,列表显示当前空文件夹下有一个隐藏目录 .git,这个目录是Git用来跟踪管理版本库的,非常重要。

4、查看仓库状态

git status

查询当前版本库的状态,若在本地仓库有有任何文件内容的改变,Git会检测到该文件,并显示

5、将文件添加到版本库

本地仓库由git维护的三棵“树“组成。第一个是工作目录(Working Dir),它持有实际文件;第二个是暂存区(Index),像个缓存区域,临时保存文件的改动;第三个是Head区,指向最后一次提交的结果。


Git工作流

前提:添加文件到版本库,一定要将文件放在版本库目录下(或子目录下)。

第一步:用命令git add添加到暂存区

git add <filename>

第二步:用命令git commit实际提交改动

git commit -m "<information>"

-m后面输入的是本次提交的说明文档,可以方便自己和别人阅读,也可以省略,但不建议。同时,可以多次add不同文件,commit可以一次提交多个文件,比如:

git add file1.txt
git add file2.txt   file3.txt
git commit -m "add 3 files"
Git添加文件到版本库

注:现在的改动已经提交到了HEAD,但还没有到远端仓库。

6、查看修改内容

git diff <file_name>

git diff顾名思义就是查看difference,显示的格式正是Unix通用的diff格式,可以从上面的命令输出看到文件的修改内容。

查看修改内容

7、版本回退

git reset --head <commit_id>

HEAD 指向的版本就是当前版本,Git允许我们在版本的历史之间回退;回退前,用git log可以查看提交历史,以便确定回退到哪个版本;要重返现在版本,用 git reflog 查看命令历史,以便确定要回到未来的哪个版本

8、撤销修改

  1. 文件在工作区,丢弃修改
git checkout -- <file_name>
  1. 文件在暂存区,丢弃修改
git reset HEAD <file_name>
git checkout -- <file_name>

9、删除和重置文件

第一步:删除本地文件

rm <file_name>

第二步:分两种情况

  1. 确实删除,从版本库中也删除
git rm <file_name>
git commit -m "<remove_info>"
  1. 删错了,从版本库恢复到最新版本
git checkout -- <file_name>

10、分支的创建删除合并

分支是用来将特性开发绝原来来的,我们创建仓库时,master是默认分支,可以在创建其他分支,在该分支上进行开发,完成后将它们合并到主分支上,并根据需要选择是否删除该子分支。


Git分支

查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git branch -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>

Git分支例子

11、Rebase

git checkout <name1>
git rebase <name2>

rebase 用于把一个分支的修改合并到当前分支

注:rebase和merge都是用于合并分支,具体区别见这里,同时要知道,使用git pull时默认是merge, 加 --rebase参数使其使用rebase方式。

12、标签

git tag <tag_id> <commit_id>

为软件发布创建标签,这个概念早已存在,在SVN中也有,可以通过git log命令获取提交ID,可以使用少一点的提交ID前几位,只要它的指向具有唯一性。

命令 意义
git tag 查看所有标签
git tag <name> 新建一个标签,默认为HEAD,也可以指定一个commit id
git push origin <tagname> 推送一个本地标签
git push origin --tags 推送全部未推送过的本地标签
git tag -d <tagname> 删除一个本地标签
git push origin :refs/tags/<tagname> 删除一个远程标签

Git中关于远程仓库,工作区和暂存区等内容,会在后续博客进行介绍。

参考资料

git入门文档
视频教程《版本控制入门 – 搬进 Github》
Git学习资源指南
Git简明指南
免费的git书箱 progit2
git常用命令手册
廖雪峰的git在线教程
在线尝试git ( 中文翻译在这里)
Git学习资源汇总
git merge和git rebase小结

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

推荐阅读更多精彩内容

  • 1、直接克隆远程仓库的某个分支 git clone -b 远程分支名 远程仓库地址 本地文件夹名 如...
    曹轩跃阅读 631评论 0 1
  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 12,647评论 4 54
  • 好不好玩啊?
    杰杰6889阅读 103评论 0 0
  • 今天孩子出院了!拔掉针头那一瞬间,镱皓说终于解放了,在医院真没意思还不如上学呢。这是想老师跟小伙伴们了吧!下午我就...
    王镱皓妈妈阅读 143评论 0 0
  • 故乡家园犹在, 心难安。 孤清月夜空房尘再满。 念亲儿, 雁已过, 叶又黄。 年年岁岁相思泪两行。
    不吃糖女士阅读 449评论 7 9