Windows下的Git的使用命令和Linux、Unix、Mac都一样,本文将首先从一些应用场景介绍Git的基本命令(上),然后详细介绍如何在Virtual Studio 2015里使用Git(下)。(至于安装,在windows下实在是太简单了就不介绍了,直接去官网下载安装吧)
一、Git的基本操作
0. 一些必要的介绍
(1) 工作区,就是我们在本机上Git目录,我们直接修改文件的时候,所有的修改都只是在工作区。
(2) 暂存区(stage或者index),是版本库中的一部分。工作区中的修改需要通过git add添加到暂存区,这些修改在暂存区中等待被提交到版本库中形成版本。
(3) 分支,是版本库中的重要部分。初始情况下Git为我们自动创建了第一个分支master,我们之后创建的分支,以及所有分支里的所有提交形成的版本记录都保存在这里。
(4) HEAD指针,也是版本库中的重要部分。初始情况下它指向master,HEAD所指向的版本就是当前版本,也就是最新的提交。
-
两种开始方式(创建新的版本库 or 从远程库克隆)
创建新的版本库,需要首先在本地创建一个空文件夹(最好不要有中文),然后在该目录下使用命令git init来把这个目录变成Git可以管理的仓库。
从远程库克隆,首先你需要有一个远程库,不妨设为git@github.com:test/test.git,那么你就可以使用命令 git clone git@github.com:test/test.git 来把远程库里的所有文件克隆到本地。 -
对原始代码进行修改后提交
(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 -
撤销修改
上面介绍了如果提交你的修改,那如果发现修改不对,要撤销修改怎么办呢?当然在不同的阶段,撤销的方法也是不一样的。
(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) 修改已经提交到版本库,但尚未推送到远程库
参见接下来的一节 版本回退 -
版本回退
(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 -
合并的过程中遇到冲突
当merge的时候遇到冲突时,我们需要手动修改冲突的部分,然后再提交。
假设我们在master和test两个分支下都修改了test.cs的相同位置,则将test分支合并到master时就会出现冲突。我们打开test.cs文件,可以看到冲突的位置。可以直接修改后保存,再提交到master。
可以用带参数的git log也可以看到分支的合并情况:
git log --graph --pretty=oneline --abbrev-commit
链接:https://www.jianshu.com/p/40441281adc3