Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。
Git:
概念:Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 [1] Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
作用:从一般开发者的角度来看,git有以下功能:
1、从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。
2、在自己的机器上根据不同的开发目的,创建分支,修改代码。
3、在单机上自己创建的分支上提交代码。
4、在单机上合并分支。
5、把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。
6、生成补丁(patch),把补丁发送给主开发者。
7、看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。
8、一般开发者之间解决冲突的方法,开发者之间可以使用pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。
从主开发者的角度(假设主开发者不用开发代码)看,git有以下功能:
1、查看邮件或者通过其它方式查看一般开发者的提交状态。
2、打上补丁,解决冲突(可以自己解决,也可以要求开发者之间解决以后再重新提交,如果是开源项目,还要决定哪些补丁有用,哪些不用)。
3、向公共服务器提交结果,然后通知所有开发人员。
工作原理:
应用解决方案:
- 创建一个版本库:git init //git help init
- 增加内容跟踪信息:git add
- e c h o " H e l l o w o r l d " > h e l l o , echo"Helloworld" > hello, echo"Helloworld">hello,echo"SnakeZero" > snake
- 我们再用 git add 命令将这两个文件加入到版本库文件索引当中:$git add hello snake
- 如果你要将某个文件从 git 的目录跟踪系统中清除出去,同样可以用 git update-index 命令。$git update-index --force-remove foo.c
- 提交内容到版本库:git commit.
- 既然我们刷新了 Git 的跟踪信息,现在我们看看版本库的状态:git status.
- 查看当前的工作:git diff; git diff 命令将比较当前的工作目录和版本库数据库中的差异。
- $git add snake; $git commit -m “new day for git”
- $git commit -a -m"new day for git";如果要提交的文件都是已经纳入 git 版本库的文件,那么不必为这些文件都应用 git add 命令之后再进行提交。
管理分支:git branch
创建分支:创建我自己的工作分支,名叫 robin,并且将以后的工作转移到这个分支上开展。
$ git branch robin$ git checkout robin
更简单和常用的方法是直接通过 checkout 命令来一次性创建并转移到新建分支上。$ git checkout -b robin [start_point] 其中 start_point 是一个可选参数,指定新建分支 robin 是基于哪个节点,默认为当前所在分支的节点。
删除分支:要删除版本库中的某个分支,使用 git branch -d 命令就可以了,例如:$ git branch -d branch-name
git branch -D branch-name//通常建议使用 -d 参数来删除分支,以防无意的信息丢失。
查看分支运行下面的命令可以得到你当前工作目录的分支列表:$ git branch.
git show-branch 命令可以使我们看到版本库中每个分支的世系发展状态,并且可以看到每次提交的内容是否已进入每个分支。
合并两个分支:git merge.
转移我们当前的工作分支到 master,并且将 robin 分支上的工作合并进来。$ git checkout master$ git merge -m “Merge from robin” robin //上面的命令会将 robin 分支的改动 merge 到 master,并生成一个新的 commit 节点,这个 commit 的注释信息为 “Merge from robin”
命令形式:git reset [–mixed | --soft | --hard] []。
命令的选项:
–mixed
仅是重置索引的位置,而不改变你的工作树中的任何东西(即,文件中的所有变化都会被保留,也不标记他们为待提交状态),并且提示什么内容还没有被更新了。这个是默认的选项。
–soft
既不触动索引的位置,也不改变工作树中的任何内容,我们只是要求这些内容成为一份好的内容(之后才成为真正的提交内容)。这个选项使你可以将已经提交的东西重新逆转至“已更新但未提交(Updated but not Check in)”的状态。就像已经执行过 git update-index 命令,但是还没有执行 git commit 命令一样。
–hard
将工作树中的内容和头索引都切换至指定的版本位置中,也就是说自 之后的所有的跟踪内容和工作树中的内容都会全部丢失。因此,这个选项要慎用,除非你已经非常确定你的确不想再看到那些东西了。
一个重要技巧--逆转提交与恢复:
比较一下现在的工作树中的内容和被取消了的那次提交的内容有什么差异:
git diff ORIG_HEAD
接着,我们可以恢复刚才被取消了的那次提交了。
git commit -a -c ORIG_HEAD
提取数据:git checkout -f foo.c //这是个很有用的小技巧,如果你对你现在的工作目录下的东西已经不耐烦了,随时可以取出你提交过的东西覆盖掉当前的文件。
类型标签:在 git 中,有两种类型的标签,“轻标签”和“署名标签”。
技术上说,一个“轻标签”和一个分支没有任何区别,只不过我们将它放在了 .git/refs/tags/ 目录,而不是 heads 目录。因此,打一个“轻标签”再简单不过了。
git tag my-first-tag:如果你打算针对某个commit ID来打标签,虽然该命令可以通过gitk里的右键菜单来实现,但是该命令对实际应用是很有帮助的。
合并工作:可以通过下面的命令来抓取远程版本库: $ git fetch