Git笔记

1. 初始设置

  • 设置姓名和邮箱
$ git config --global user.name "zhutx"
$ git config --global user.email "16530202@qq.com"
  • 提高命令输出的可读性
$ git config --global color.ui auto

会在"~/.gitconfig"中输出
[user]
name = zhutx
email = 16530202@qq.com
[color]
ui = auto

2. Git操作

2.1. Git基本操作

  • git init---初始化仓库

$ mkdir git-tutorial

$ cd git-tutorial

$ git init

Initialized empty Git repository in D:/Program Files/Git/git-tutorial/.git/

  • git status---查看仓库状态

  • git add---添加文件到暂存区

  • git commit---提交修改
    git commit -m "First commit"

  • git log---查看提交日志
    git log --pretty=short 只查看提交简短信息,轻松把握多个提交
    git log README.md 指定目录或文件,查看具体目录或文件的提交只
    git log -p README.md 查看提交日志及提交前后的差别
    git log --graph 以图表形式输出提交日志,非常直观。可以清楚的看到分支的提交和合并

  • git diff---查看更改前后的差别
    git diff 查看当前和暂存区的差别
    git diff -HEAD 查看当前和末次提交的差别(提交前最好养成这个好习惯)

2.2. Git分支操作

  • git branch---浏览分支
  • git checkout -b---创建并切换分支
$ git checkout -b feature-A
# 等同于
$ git branch feature-A
$ git checkout feature-A
# 分支修订后,回到master主干分支进行合并
$ git checkout -
  • git merge---合并分支
$ git merge --no-ff feature-A

2.3. 更改提交的操作

  • git reset---回溯历史版本
# 回溯到feature-A分支创建之前,创建一个名为fix-B的特性分支
# 先通过图表方式,把提交图表show出来,找出创建feature-A分支之前的commit的hash
$ git log --graph
# 然后我们就可以回溯到这个版本了
$ git reset --hard fd0cbf

# 然后就可以创建新分支了

$ git checkout -b fix-B

  • git reflog---查看当前仓库执行过的操作日志

这个命令很有用。即便开发者错误执行了Git操作,基本也可以利用git reflog命令恢复到原先的状态

# git log只能查看以当前状态为终点的历史日志。如果我们的目标是要将fix-B的修改合并到已经合并了feature-A分支修改的master上,那么就可以用下面的命令查找出hash
$ git reflog
# 找到feature-A特性分支合并后的状态的hash值,恢复到这个状态
$ git reset --hard 83b094
# 合并fix-B分支的修改
$ git merge --no-ff fix-B
# 如果有冲突,编辑冲突后执行git add和git commit
  • git commit --amend---修改上一次提交信息

2.4. 推送至远程仓库

先在GitHub上创建同名仓库。创建时不要勾选Initialize this repository with a README。因为一旦勾选,GitHub的仓库就会自动生成README文件,从而创建之初便于本地仓库失去了整合性。


# 将GitHub上创建的仓库设置成本地仓库的远程仓库。远程仓库的名称设置为origin(标识符)

$ git remote add origin git@github.com:zhutx/git-tutorial.git

  • git push---推送至远程仓库

# 将本地仓库的master主干分支内容,推送至远程仓库的同名分支下

# -u参数可以在推送的同事,将origin仓库的master分支设置为本地仓库当前分支的upstream(上游)。添加了这个参数,将来运行git pull命令从远程获取内容时,本地仓库的这个分支就可以直接从origin的master分支获取内容,省去了另外添加参数的麻烦。

$ git push -u origin master

# 本地其他分支也可以这么推送给远程仓库分支

$ git push -u origin feature-D

# 现在,远程仓库的GitHub页面可以看到feature-D分支了。

2.5. 从远程仓库获取

  • git clone---获取远程仓库

$ git clone git@github.com:zhutx/git-tutorial.git

# 同时查看本地仓库和远程仓库的分支信息

$ git branch -a

# 获取远程仓库的feature-D分支(即
以origin/feature-D作为来源,创建本地feature-D分支)
$ git checkout -b feature-D origin/feature-D

# 本地对feature-D进行相关修订后,用push推送

$ git push

  • git pull--获取最新的远程仓库分支

2.6. 仓库的维护

Fork或clone来的仓库,一旦放置不管就会离最新的源代码越来越远。如果不以最新的源代码为基础进行开发,劳神费力地编写代码也很可能是白费力气。通常来说clone来的仓库实际上与原仓库没有任何关系。所以我们需要将原仓库设置为远程仓库,从该仓库fetch数据与本地仓库merge,让本地仓库的源代码保持最新状态。


# 比如我们在GitHub上fork了octocat/Spoon-Knife仓库,然后clone

$ git clone git@github.com:hirocastest/Spoon-Knife.git

$ cd Spoon-Knife

# 我们给原仓库设置upstream名称,将其作为远程仓库

$ git remote add upstream git://github.com/octocat/Spoon-Knife.git

# 从远程仓库获取最新数据

$ git fetch upstream

# 将upstream/master分支与当前分支合并

$ git merge upstream/master

3. GitHub

3.1. 设置SSH Key

使用https url克隆对初学者来说会比较方便,复制https url 然后到 git Bash 里面直接用clone命令克隆到本地就好了。而使用 SSH url 克隆却需要在克隆之前先配置和添加好 SSH key 。因此,如果你想要使用 SSH url 克隆的话,你必须是这个项目的拥有者。否则你是无法添加 SSH key 的。https url 在push的时候是需要验证用户名和密码的;而 SSH 在push的时候,是不需要输入用户名的,如果配置SSH key的时候设置了密码,则需要输入密码的,否则直接是不需要输入密码的。

# 先检查是否已有SSH Key
$ cd ~/.ssh
$ ls
# 不存在则创建SSH Key
$ ssh-keygen -t rsa -C "16530202@qq.com"

# 存在id_rsa  id_rsa.pub文件,说明已生成过SSH Key了,直接复制公钥内容
clip < id_rsa.pub

在GitHub的设置中将SSH Key添加起来,验证一下通过本地私钥与GitHub进行认证和通信

$ ssh -T git@github.com

键入密码后,输出以下内容,说明SSH Key配置成功

Hi zhutx! You've successfully authenticated, but GitHub does not provide shell access.

3.2. Pull Request

3.3. 协作工具---Jekins(P162,待补充)

3.4. GitHub Flow---以部署为中心的开发模式

利用GitHub进行软件开发,想必会以下面的流程进行Pull Request

  1. 在GitHub上进行Fork

  2. 将1的仓库clone至本地开发环境

  3. 在本地环境中创建特性分支

  4. 对特性分支进行代码修改并进行提交

  5. 将特性分支push到1的仓库中

  6. 在GitHub上对Fork来源仓库发送Pull Request

在无法给不特定的多数人赋予提交权限的公开软件开发中,这种流程能够防止仓库收到计划之外的提交。

然而在企业开发中,开发者每天见面,经常相互发送Pull Request就显得有些繁琐了。

GitHub Flow,是一个以部署为中心的开发流程。在实际开发中往往1天内会实施几十次部署,而支撑这一切的,就是足够简单的开发流程以及完全的自动化。

GitHub Flow的流程

  1. 令master分支时常保持可部署状态

  2. 进行新作业时要从master分支创建新分支,新分支名称要具有描述性

  3. 在2新建的本地仓库分支中进行提交

  4. 在GitHub端仓库创建同名分支,定期push

  5. 需要帮助或反馈时创建Pull Request,以Pull Request进行交流

  6. 让其他开发者进行审查,确认作业完成后与master分支合并

  7. 与master分支合并后立刻部署

  • 随时部署,没有发布的概念

    这个流程必须遵循“令master分支随时保持可以部署的状态”这一规则

  • 部署作业完全自动化

    这一流程在一天当中需要多次部署,陈旧的开发模式按部署文档进行部署会浪费相当多的时间。需要选择一款web自动化部署工具,如Webistrano、Strano和Webhooks等

  • 重视测试

    让测试自动化,开发者必须提交测试代码。push到远程仓库后,Jekins等CI工具自动对齐进行测试。

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

推荐阅读更多精彩内容

  • 1. 安装 Github 查看是否安装git: $ git config --global user.name "...
    Albert_Sun阅读 13,414评论 9 163
  • 对于一个新的包括submodule的项目调用以下命令即可 或者 配置 首先是配置帐号信息 ssh -T git@g...
    brownfeng阅读 447评论 0 0
  • 科长孩子生病了,科里除了两个借调的,还有两个文员,文员显然不堪大任,另外一个借调的,科长又不太信任,于是,科里的工...
    和一波阅读 172评论 0 1