在Windows下使用Git简介(上)

Windows下的Git的使用命令和LinuxUnixMac都一样,本文将首先从一些应用场景介绍Git的基本命令(上),然后详细介绍如何在Virtual Studio 2015里使用Git(下)。(至于安装,在windows下实在是太简单了就不介绍了,直接去官网下载安装吧)

一、Git的基本操作

0. 一些必要的介绍

(1) 工作区,就是我们在本机上Git目录,我们直接修改文件的时候,所有的修改都只是在工作区。
(2) 暂存区(stage或者index),是版本库中的一部分。工作区中的修改需要通过git add添加到暂存区,这些修改在暂存区中等待被提交到版本库中形成版本。
(3) 分支,是版本库中的重要部分。初始情况下Git为我们自动创建了第一个分支master,我们之后创建的分支,以及所有分支里的所有提交形成的版本记录都保存在这里。
(4) HEAD指针,也是版本库中的重要部分。初始情况下它指向masterHEAD所指向的版本就是当前版本,也就是最新的提交。

1. 两种开始方式(创建新的版本库 or 从远程库克隆)

创建新的版本库,需要首先在本地创建一个空文件夹(最好不要有中文),然后在该目录下使用命令git init来把这个目录变成Git可以管理的仓库。
从远程库克隆,首先你需要有一个远程库,不妨设为git@github.com:test/test.git,那么你就可以使用命令 git clone git@github.com:test/test.git 来把远程库里的所有文件克隆到本地。

2. 对原始代码进行修改后提交

(1) 创建分支(并不是修改代码一定要创建分支,也可以直接在master上进行,但是一个良好的习惯是无论是添加新的feature还是fix bug最好先创建一个分支,修改好了提交再合并到master
首先你要清楚当前你所处的branch,然后确定你的修改要基于哪个branch。假设你要在master上进行修改,当前又不在master branch则需要先切换过去,git checkout master,然后采用下面的命令创建你的分支。
git branch dev/feature // 创建新的分支,名字是dev/feature git checkout dev/feature // 从master切换到我们刚创建的分支
上面这两句话可以通过一个参数变成一句话,即-b,表示创建新的branch且切换过去。
git checkout -b dev/feature
(2) 修改文件(与git无关就不介绍了,假设修改了文件test.cs
(3) 将修改添加到暂存区
git add test.cs
注意,如果test.cs是你的project里的一个文件,还需要带上整个相对路径,如果不清楚,可以在add之前git status命令看看,它会告诉你哪个文件修改了还没有提交,直接用它提示的那个文件名
(4) 把修改提交到仓库
git commit -m "comment on your change"
-m后面是本次提交的说明,你可以在这里简要描述你的修改内容,这样查看或者查找修改的历史记录时会比较方便。
(5) 把修改合并到master
git checkout master git merge dev/feature
默认情况下这样合并是“快进模式”(Fast-forward),也就是直接把master指向dev/feature的当前提交,所以合并速度非常快。如果不想让他这样做,则可以使用参数--no-ff
git merge --no-ff -m "merged dev/feature" dev/feature
(6) 把修改提交到Server
git push origin master
(7) 删除分支
如果dev/feature不会再使用,则可以在merge之后就删掉它,反正Git里创建和删除分支的代价很小。
git branch -d dev/feature

3. 撤销修改

上面介绍了如果提交你的修改,那如果发现修改不对,要撤销修改怎么办呢?当然在不同的阶段,撤销的方法也是不一样的。
(1) 尚未将修改添加到暂存区
采用git checkout -- file直接丢弃工作区的修改。如果同一个文件你要保留一部分修改,撤销一部分的话,好像不行。所以建议你每完成一小块的工作就通过git add添加到暂存区。这样工作区的修改不会太大,直接丢弃没什么影响。
比如,你先在test.cs文件里添加了func1()函数,add到暂存区;然后添加了函数func2()函数。突然间对这部分不满意了,这个时候直接采用git checkout -- test.cs就可以丢弃添加的func2()函数,对func1()没影响。
(2) 修改已经添加到暂存区,但是尚未提交
用命令git reset HEAD file(这里HEAD表示最新的版本)可以把暂存区的修改撤销掉,这些修改被重新放回工作区,可以在工作区接着修改后添加到暂存区,或者在工作区再采用(1)中的方法直接丢弃。
(3) 修改已经提交到版本库,但尚未推送到远程库
参见接下来的一节 版本回退

4. 版本回退

(1) 用git log命令查看提交的历史记录
可以添加参数--pretty=oneline让每个记录只输出一行
git log --pretty=oneline
也可以设置一些其他的参数,如下所示,你可以试试。
git log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
(2) 确定你要回退到的版本
从上面的log中你可以看到历史上的各个版本,但是要确定你要回退到的版本,你首先要知道Git中的版本表示。在Git中,HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
(3) 使用git reset命令回退到指定版本
git reset --hard HEAD^
(4) 若回退后又想回到新版本
git reflog git reset --hard 3628164

5. 合并的过程中遇到冲突

merge的时候遇到冲突时,我们需要手动修改冲突的部分,然后再提交。
假设我们在mastertest两个分支下都修改了test.cs的相同位置,则将test分支合并到master时就会出现冲突。我们打开test.cs文件,可以看到冲突的位置。可以直接修改后保存,再提交到master
可以用带参数的git log也可以看到分支的合并情况:
git log --graph --pretty=oneline --abbrev-commit

参考文献:

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

推荐阅读更多精彩内容

  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 12,639评论 4 54
  • 1. 安装 Github 查看是否安装git: $ git config --global user.name "...
    Albert_Sun阅读 13,615评论 9 163
  • 在朋友的空间里看到一句话,很值得回味,大意是有个比她年轻一些的朋友问她,如何才能放下心中念念不忘的人。她没有多说...
    君言红语阅读 597评论 1 4
  • 堅持第118天 昨天早上我送妹妹上學,回來的路上到處堵車,心裡急的不得了,跟司機約好8:30送哥哥去機場,可8:2...
    一棵樹阅读 98评论 0 0
  • plan: 上午: lda图,数据做出来; 看书; 下午: Fps 图做出来; 数据整理好; 晚上: mean-s...
    changgg阅读 177评论 0 0