Git从0到1

本文只是帮助你入门,从一个不会使用git的小白,到会解决开发中常见的使用。
废话不多说,直接进入正题。

最远处

git

git是用于Linux内核开发的版本控制工具。与CVS、Subversion一类的集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便。git的速度很快,这对于诸如Linux内核这样的大项目来说自然很重要。git最为出色的是它的合并追踪(merge tracing)能力

安装

安装,其实很简单,和普通软件安装无异。这里不介绍了。

创建新仓库

创建一个目录,打开,然后执行

git init

创建一个新的git仓库.
初始化git的方法有很多种

  • 在本地创建
  • 在gitlab或github上创建,git clone下来,
  • 图形界面上创建
远程
克隆仓库

执行如下命令可以创建一个本地克隆版本:

git clone /path/to/repository

如果实在远端服务器上的仓库,你的命令会是这样子:

git clone username@host:/path/tp/repository

克隆仓库也有很多内容,比如修改仓库名之类的等等。

工作流

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

git工作原理

添加和提交

你可以提交更改(吧它们添加到暂存区),使用如下命令:

git add <filename>
git add *
git add .

这是git基本工作流程第一步;使用如下命令以时间提交改动:

git commit -m '代码提交的信息'

现在,你的改动已经提交到HEAD,但是没有提交到你的远端仓库。

推送改动

你的改动现在已经在本地仓库的HEAD中了。执行如下命令以将这些改动提交到远端仓库:

git push origin master

可以把master换成你想要推送的任何分支。
如果你没有克隆现有的仓库,并欲将的仓库连接到某个远程服务器,你可以使用如下命令添加:

git remote add origin <server>

如此,你就可以将你的改动推送到所添加的服务器上去了。

分支

分支是用来将特性开发绝缘开来的,在你创建仓库的时候,master是"默认的"分支。在其他分支进行开发,完成后再将他们合并到主分支上。
创建一个叫"feature_test"的分支,并切换过去:

git checkout -b feature_test
# or
git branch feature_test
git checkout feature_test

切换回主分支

git checkout master

删除分支

git branch -d feature_test

除非你将分支推送到远程仓库,不然该分支就是其他人不可见的:

git push origin <branch>

更新与合并

要更新你本地仓库至最新改动,执行:

git pull origin <branch>

以在你工作目录中获取(fetch)合并(meger)远端的改动。
要合并其他分支到你当前分支(如master),执行:

git merge <branch>

在这两种情况下,git都会尝试去自动合并并改动。遗憾的是,这可能并非每次都成功,并可能出现(conficts).这个时候就需要你修改这些文件手动合并这些冲突(conflicts).改完后,你需要执行如下命令将他们标记为合并成功:

git add <filename>

在合并改动之前,你可以使用如下命令预览差异:

git diff <source_branch> <target_branch>

标签

为软件发布创建标签是推荐的。这个概念早已存在,svn中也有。你可以执行如下命令创建一个叫做1.0.0的标签:

git tag 1.0.0 abcdef1234

abcef1234是你想要标记的提交的ID的前10位字符,可以使用下列命令获取提交ID:

git log

你也可以使用少一点的提交ID前几位,只要它的指向具有唯一性。提交ID可以回滚。

log

如果想要了解蹦迪仓库的历史记录,最简单的命令:

git log

还可以添加一些参数来修改它的输出,得到自己想要的结果。只看某个人提交的记录:

git log --auth=youdi

一个压缩后每一条提交记录只占位一行

git log --pretty=oneline

或者你想要通过ASCII艺术的树形结构来显示所有的分支,每个分支都标示了它的名字和标签:

git log --graph --oneline --decorate --all

看看哪些文件改变了:

git log --name-status

这些只是你可以使用的参数一部分,更多可以查看:

git log --help

替换本地改动

假如你操作失误(当然,这最好永远不要发生),你可以使用如下命令替换掉本地改动:

git checkout -- <filename>

此命令会使用 HEAD 中的最新内容替换掉你的工作目录中的文件。已添加到暂存区的改动以及新文件都不会受到影响。


假如你想丢弃你在本地的所有改动与提交,可以到服务器上获取最新的版本历史,并将你本地主分支指向它

git fetch origin
git reset --hard origin/master

使用小贴士

彩色的git输出

git config color.ui true

显示历史记录时,每一个提交信息只显示一行

git config format.pretty oneline

交互式添加文件到暂存区

git add -i

下面介绍一些工作中常用的小技巧:

撤销刚刚git add(暂存区的文件)

git reset --hard <filename>
撤销暂存区中指定的commit之前的提交
git reset --hard <commit的hash值>

注:--hard丢弃working directory中内容的修改
--soft保留working directory中内容的修改

修改commit最新一次的注释信息

git commit -amend

会打开编辑器,可能是nano,或vim
修改以后,重新push到远端仓库

git push master origin  -f

另外:

git commit -amend -m 'msg'

修改commit的历史注释信息

git rebase -i head~2

修改前2条提交记录

版本回退

版本回退,需要使用git commit提交ID,查看如下命令:

git log

回到指定版本

git reset --hard  <commit hash value>

远端仓库也回退

git push origin <branch> -f

忽略文件

如果忽略文件,在仓库中创建 .gitignore

vim .gitignore
*.pyc
/tmp
database.config
.gitignore
.tmp

进行匹配,匹配成功文就不会添加到work directory.

储藏(Stashing)

经常有这样的事情发生,当你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态,而你想转到其他分支上进行一些工作。问题是,你不想提交进行了一半的工作,否则以后你无法回到这个工作点。解决这个问题的办法就是git stash命令。

“‘储藏”“可以获取你工作目录的中间状态——也就是你修改过的被追踪的文件和暂存的变更——并将它保存到一个未完结变更的堆栈中,随时可以重新应用。

git stash

查看储藏的信息

git stash list

放出储藏

git stash pop <stash index>

多个仓库,开发

在公司开发,一般都是将项目clone到自己名下的仓库中,进行开发,如何在本地拉去项目中最新的项目。
修改git配置文件 .git/config

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = git@github.com:jacksonyoudi/python-note.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
[remote "google"]
        url = git@github.com:google/python-note.git
        fetch = +refs/heads/*:refs/remotes/origin/*

按上面配置好以后
拉取项目最新代码,合并到本地

git pull google master

推送到项目上,而非自己仓库

git push google feature
望见

git的内容就介绍到这里,以上都是皮毛,你只当做入门的初级文章即可,不必深究。如果有精力,希望你配置好github.
如想深入,建议官方文档。

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

推荐阅读更多精彩内容

  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 12,648评论 4 54
  • Git是目前最流行的版本管理系统,也是最先进的分布式版本控制系统(distributed version cont...
    pro648阅读 5,676评论 1 17
  • 风,静静的吹着,带走一丝困乏,没有星星的夜空中,月亮独自守着,挂在树梢,柔和的光线撒在整片河滩。九月份,沙澧河蟹味...
    弟垅阅读 259评论 2 2
  • 没由来的心悸,好像已经很久很久没有的感觉,久到我以为我从未有过这种感觉,但这次觉得以前的有些幼稚,我突然改变我的...
    匿于尘埃阅读 149评论 0 0
  • 第一次做这样的思维导图,以后有待加强
    小欣_Angelina阅读 228评论 5 0