掷鸡蛋者
发表于: 2011/11/15 10:54 引用 回复 只看该作者 1# TOP
管理员
性别: 男
积分:52147
阅读权限:43349
帖子: 8300
加入时间: 2010/4/29
最后登录: 2014/12/20

《vs中git基本操作图解1》在这里:http://www.wojilu.com/Forum1/Topic/2237 本文是第二部分。

------------------------------------


五、文件管理


【删除文件】

 

 vs 中,因为有插件的支持,所以可以直接删除;删除之后,需要提交一下。提交的时候 git extensions 会将删除操作同步到版本库中。

 

如下图,文件“xxxFile.cs”被删除之后,在 commit 窗口中显示删除标记“—”:

 

说明:如果是在命令行中,请不要直接使用 rm操作,而是使用 git rm 命令。

 

【如何查看被删除的文件?】

 

点击 "Git" 菜单中的 "Browse" 命令,打开提交历史窗口,请点击文件尚未被删除的某个提交,比如下面的 "add class1",然后切换下面的窗口到“文件树”中

 

在文件数中,可以查看当前历史中所有文件。

 

另外,还可以在项目中右键菜单中点击“Git - History”命令,进入相应的“Show Files”窗口中查看文件数。

 

【如何恢复被删除的文件?】

 

在上图中,找到需要恢复的文件,然后右键“另存为”,保存到项目中即可。

 

【移动文件】

 

1)在 vs 中直接移动即可。

 

2)如果被移动的文件是中文名,git extensions 对话框会有bug,需要使用命令行工具。请打开命令行,进入到 .git 文件所在的目录,输入命令——

git add -u .

这个命令,比普通的 "git add ." 多了一个参数 -u,表示将各种变动也添加进来

 

【如何恢复刚做的修改?】

 

在提交窗口中,选中文件,点击“重置选中的文件”,或者右下角的“复位更改”

 

或者在右键中 "Git" ->Undo File Changes

 

【修改最后一次提交信息】

 

对刚才的提交后悔了?想更改最后一次提交?

新增一个提交,并点击上面的“更改最后一次提交”,新的提交信息将覆盖上一次提交。

 

警告:只有当上一次提交尚未push到远程版本库的时候,才可以使用本方法;否则,对上一次提交的修改会引起混乱。

 

七、分支管理

 

 git 中,分支非常简单易用,建议经常创建分支。

 

比如,你有一个实验性的想法,可以创建一个分支去测试,完全不影响正式的代码。

 

再比如,要开发一个新功能,那就创建一个分支专门提交这个功能相关的代码,如果开发完毕,将此分支合并到主分支即可。这种为特定而新开的分支,我们叫“特性分支(Feature Branch)”。它的一个重要优点是:如果新功能不能如期完工,也不会影响主分支的发布。

 

另外在bug修复等方面,git 的分支功能也非常方便易用。可以说,分支功能是 git 最棒的功能之一。

 

1)创建分支

 

 

 

填写“分支名称”,然后点击“创建分支”

 

创建之后,解决方案管理器(Solution Explore 后面显示当前所在的分支,比如下图显示 branch1)

 

2)切换分支

 

注意:在切换之前,记得先提交,以保证尚未提交的文件已经保存到版本库中。

点击Git菜单中的“Checkout branch”命令,

 

 

然后选择需要签出的分支:

 

 

3)合并分支

 

点击下图的“Merge”命令

然后选择需要合并的分支:

合并之后,在你的当前分支中,就会出现目标分支的内容。

 

4)删除分支

 

因为在git中创建分支是很容易、很频繁的事情,所以,当某个分支没有用处的时候,也就经常需要删除。注意,如果分支还没有合并,那么删除分支会导致此分支下的所有commit丢失,所以在删除之前请先合并分支。

 

方法:点击“Git”菜单中的“Browse”,进入git日志列表,在有分支标记的上面右键点击“删除分支”命令:

 

 

5)分支“衍合”(rebase,又叫“变基”)

 

将一个分支在master上衍合,会执行如下步骤:

• 此分支中所有commit都会stash临时缓存;

• 然后删除此分支;

master分支之上重新创建此分支;

• 在新创建的分支上提交刚才缓存的所有commit

在衍合过程中,有可能发生合并冲突,这个往往需要你手工逐个解决。

 

衍合(变基)做法:先进入需要被衍合的分支,然后点击"rebase"命令,在弹窗中 rebase on 后面选择分支,比如在分支 branch1 中选择master分支,表示将branch1衍合到master( rebase on master)

 

 

八、tag 管理

 

 git 中,tag(标签)经常用来标记版本,比如给某个提交打上 "v1.0" tag,以表示这是1.0版本。

 

1)创建tag

 

通过“Git”菜单的“Browse”命令,进入提交(commit)列表窗口,你可以在任意提交(commit)上面右键点击“创建新标签”命令,比如输入“v1.0

 

创建的时候建议一定要勾选“创建带注解的标记”,如下图所示,填写“消息”。因为你打上的tag,别人未必能理解它的意思和目的,有注解的 tag 更加方便协同工作。另外,tag 名称中不允许有空格。

 

2)删除 tag

 

tag 不可以修改和移动,所以如果要修改或移动,请先删除,然后添加一个新的 tag

删除方法:在 tag 上右键点击“删除标签”即可。

 

 

3tag 推送

 

在向远程服务器 push 推送数据的时候,默认状态下,tag 不会被推送,你需要进入“推送标签”(如下图所示),然后勾选“强制推送”,才能将 tag 推送上去。

注意:tag 一旦推送到远程服务器,就不要再改动,因为有可能导致一个相同的 tag 在不同用户那里含义不同,造成混乱。

 

4)在 github 中提供下载

 

Github 非常体贴,只要是打上 tag 的,都自动打包,提供下载。如下图,我给 wojilu 托管之后的第一个commit打上了 "v1.8.5"  tag,在 github 中,其他人就可以直接下载这个版本了。

 

 

下载之后,用vs2010打开即可调试运行。

 

 

九、冲突合并

 

在分支合并的时候,往往发生内容冲突,大多数情况下 git 都会帮你自动合并,省掉很多麻烦。

但有些时候,git 无法处理,需要你手工解决。

 

一般有三种类型的冲突,需要你手工处理:

一个被删除,一个被修改

会提示你:选择修改的文件,还是删除的文件?

一个被删除,一个新创建

会提示你:选择创建的文件,还是删除的文件?

在两个分支中分别作了不同的修改

会提示你:使用 merge 工具手工修改冲突

 

下面简单介绍一下如何使用合并工具 kdiff3

 

比如在分支合并中,如果有冲突,会出现弹窗提醒

 

点击“是”,出现如下合并工具窗口,请选择右上角的“Open in kdiff3

 

kdiff3在启动的时候,也会出现一个弹窗

 

请点击“OK”,然后出现kdiff3的主窗口

 

屏幕上有四个窗口,上面三个,依次是 base/local/remote窗口,下面是output窗口

窗口

Base

需要合并的两个文件的最近的共同祖先版本

窗口

Local

当前分支文件

窗口

Remote

需要合并的另外分支的文件

 

Output

合并之后的文件

 

合并方法:在Output文件中的冲突区域,右键选择A/B/C的相应内容。

 

选择之后,如果不满意,还可以在冲突区域直接编辑输入

 

修改之后,保存并退出即可。

 

补充说明:需要注意的是,有些冲突是逻辑上的冲突,是隐含的,工具无法自动侦测出来。比如你修改一个函数的返回值,使得他的含义变化;而别人是使用这个函数的,那么,当你修改之后,别人的程序也许无法正常运行,但工具并不能发现这种逻辑上的冲突。这个当然不是合并工具的问题,它需要的是程序设计者思维的谨慎周密。

关键词 git 修改tag
相关文章
而死,不默而生

快速回复主题