目录
Git简介
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,
Git安装
git官网按照对应系统进行安装。网址: 官网git-scm.com gitforwindows.org。一直点next 最后finish就OK了。
Git与svu的区别
svu是集中式版本控制系统。版本库集中放在中央服务器,在自己电脑联网时可以使用。获取最新版本后推送给中央服务器。
git是分布式版本控制系统。没有中央服务器,自己的电脑是个版本库,不需要联网,版本在自己的电脑上只需要他推送修改内容给对方。对方就可以查看了,反过来也是如此。
Git工作流程
- 从远程仓库中克隆 (git clone)Git 资源作为本地仓库;
- 从本地仓库中checkout代码然后进行代码修改;
- 在提交本地仓库前先将代码提交到暂存区(git add .);
- 提交修改(git commit),提交到本地仓库;本地仓库中保存修改的各个历史版本;
- 在需要和团队成员共享代码时,可以将修改代码推(git push)到远程仓库。
核心概念
三个区两个仓库
orkspace: 工作区,平时存放项目代码的地方。
ndex / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
常用命令 :git clone(克隆)、git push(上传远程代码并合并)、git add (添加文件到暂存区)、git commit(提交暂存区到本地仓库。)、git checkout(切换分支)、git pull(下载远程代码并合并),
创建仓库
1. git init 选择或创建一个文件夹 初始化 git init 生成一个.git (git仓库)
2. git init newrepo 文件newrepo里面出现.git ,Git 需要的数据和资源都存放在这个目录中
3.
基本命令
- git inithttps://www.runoob.com/git/git-init.html 初始化库
- git clonehttps://www.runoob.com/git/git-clone.html 下载一个项目 克隆
- git addhttps://www.runoob.com/git/git-add.html 添加文件到暂存区
- git commithttps://www.runoob.com/git/git-commit.html 提交暂存区到本地仓库。
- git resethttps://www.runoob.com/git/git-reset.html 回退版本。
- git rmhttps://www.runoob.com/git/git-rm.html 将文件从暂存区和工作区中删除。
- git mvhttps://www.runoob.com/git/git-mv.html 移动或重命名工作区文件。
- git pullhttps://www.runoob.com/git/git-pull.html 下载远程代码并合并
- git push https://www.runoob.com/git/git-push.html 上传远程代码并合并
分支
Git 分支实际上是指向更改快照的指针。分支意味着从开发主线上分离开来,不影响主线的同时继续工作
- 查看分支 git branch
- 创建分支 git branch XXX
- 切换分支 gie checkout XXX
- 推送至远程仓库分支 git push XXX
- 合并分支 gie merge XXX
- 删除分支 gie branch -d XXX
合并冲突
1.合并本地后,与远程仓库合并。
$ git branch * master $ cat runoob.php
2.创建名字为 change_site 的分支,切换过去,我们将 runoob.php 内容改为:
<?php echo 'runoob'; ?>
3.创建分支change_site,将修改内容添加到分支。
$ git checkout -b change_site Switched to a new branch 'change_site' $ vim runoob.php $ head -3 runoob.php <?php echo 'runoob'; ?> $ git commit -am 'changed the runoob.php' [change_site 7774248] changed the runoob.php 1 file changed, 3 insertions(+)
4.将修改的内容提交到 change_site 分支中。 现在,假如切换回 master 分支我们可以看内容恢复到我们修改前的(空文件,没有代码),我们再次修改 runoob.php 文件。
$ git checkout master Switched to branch 'master' $ cat runoob.php $ vim runoob.php # 修改内容如下 $ cat runoob.php <?php echo 1; ?> $ git diff diff --git a/runoob.php b/runoob.php index e69de29..ac60739 100644 --- a/runoob.php +++ b/runoob.php @@ -0,0 +1,3 @@ +<?php +echo 1; +?> $ git commit -am '修改代码' [master c68142b] 修改代码 1 file changed, 3 insertions(+)
5..现在这些改变已经记录到我的 "master" 分支了。接下来我们将 "change_site" 分支合并过来。
$ git merge change_site Auto-merging runoob.php CONFLICT (content): Merge conflict in runoob.php Automatic merge failed; fix conflicts and then commit the result. $ cat runoob.php # 打开文件,看到冲突内容 <?php <<<<<< HEAD echo 1; ======= echo 'runoob'; >>>>>>> change_site ?>
6.我们将前一个分支合并到 master 分支,一个合并冲突就出现了,接下来我们需要手动去修改它。
$ vim runoob.php $ cat runoob.php <?php echo 1; echo 'runoob'; ?> $ git diff diff --cc runoob.php index ac60739,b63d7d7..0000000 --- a/runoob.php +++ b/runoob.php @@@ -1,3 -1,3 +1,4 @@@ <?php +echo 1; + echo 'runoob'; ?>
7.在 Git 中,我们可以用 git add 要告诉 Git 文件冲突已经解决
$ git status -s UU runoob.php $ git add runoob.php $ git status -s M runoob.php $ git commit [master 88afe0e] Merge branch 'change_site'
8.成功解决,并提交结果。