在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教程》
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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