Git 版本管理的使用及理解

如果多人合作时,git也是需要中间交换服务器来解决冲突合并,这不还是集中式版本控制吗?
而svn不是也可以将所有源码下载到本机,然后在本机修改,保存在本机上,为什么这个不能说是分布式,提交的时候不也是解决冲突合并就ok吗?

git和svn的区别:

https://blog.csdn.net/hellow__world/article/details/72529022

git详细使用说明:

https://my.oschina.net/gsbhz/blog/337719

 

 

 

git使用过程简介:

准备工作

1.下载git,并安装,安装完毕后,桌面空白处上右键,菜单出现Git GUI Here和Git Bash Here既安装成功

2.注册github账号(这一步不是必须,因为本文要配合github使用,所以需要github作为远程仓库)

 

Git基本常用命令如下:

   mkdir:         XX (创建一个空目录 XX指目录名)

   pwd:          显示当前目录的路径。

   git init          把当前的目录变成可以管理的git仓库,生成隐藏.git文件。

   git add test.txt       把test.txt 文件添加到暂存区去。

   git commit –m “修改bug10879”  提交文件 –m 后面的是注释。

   git status        查看仓库状态

   git diff  test.txt       查看test.txt 文件修改了那些内容

   git log          查看历史记录

   git reset  –hard HEAD^ 或者 git reset  –hard HEAD~ 回退到上一个版本

                        (如果想回退到100个版本,使用git reset –hard HEAD~100 )

   cat test.txt          查看test.txt 文件内容

   git reflog       查看历史记录的版本号id

   git checkout -- test.txt   把test.txt 文件在工作区的修改全部撤销。

   git rm test.txt           删除test.txt 文件

   git remote add origin http://github.com/username/gittest 关联一个远程库

   git push –u origin master  (第一次要用-u 以后不需要) 把当前master分支推送到远程库

   git push origin master  Git会把master分支推送到远程库对应的远程分支上

   git clone http://github.com/username/gittest 从远程库中克隆

   git checkout –b dev  创建dev分支 并切换到dev分支上

   git branch  -a 查看当前所有的分支

   git checkout master 切换回master分支

   git merge dev    在当前的分支上合并dev分支

   git branch –d dev 删除dev分支

   git branch name  创建分支

   git stash 把当前的工作隐藏起来 等以后恢复现场后继续工作

   git stash list 查看所有被隐藏的文件列表

   git stash apply 恢复被隐藏的文件,但是内容不删除

   git stash drop 删除文件

   git stash pop 恢复文件的同时 也删除文件

 

一.git add 和commit 多个文件

1.git add --all
2 git   add  .
3.git add file1  file2  file3    //用空格分开,文件夹同理
commit的话 ,直接就commit 后面不跟任何东西就是把add的所有文件commit了

 

二.git 放弃本地更改

如果在修改时发现修改错误,而要放弃本地修改时,

一.未使用 git add 缓存代码时。

可以使用 git checkout -- filepathname (比如: git checkout -- readme.md  ,不要忘记中间的 “--” ,不写就成了检出分支了!!)。放弃所有的文件修改可以使用 git checkout .  命令。

此命令用来放弃掉所有还没有加入到缓存区(就是 git add 命令)的修改:内容修改与整个文件删除。但是此命令不会删除掉刚新建的文件。因为刚新建的文件还没已有加入到 git 的管理系统中。所以对于git是未知的。自己手动删除就好了。

 

二.已经使用了  git add 缓存了代码

git status 先看一下add 中的文件 
git reset HEAD  XXX.java 就是对某个文件进行撤销了

放弃所有的缓存可以使用 git reset HEAD . 命令
此命令相当于撤销 git add 命令所在的工作。在使用本命令后,本地的修改并不会消失,而是回到了如(一)所示的状态。继续用(一)中的操作,就可以放弃本地的修改

 

三.git fetch 和git pull 

1、git fetch 相当于是从远程获取最新到本地,不会自动merge,如下指令:

 git fetch orgin master //将远程仓库的master分支下载到本地当前branch中

 git log -p master ..origin/master //比较本地的master分支和origin/master分支的差别

 git merge origin/master //进行合并

2. git pull:相当于是从远程获取最新版本并merge到本地,相当于fetch+merage

    git pull origin master

 

四.工作区、暂存区、仓库区、远程仓库

Git本地有四个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、仓库区(Repository或Git Directory)、远程仓库(Remote Directory)。文件在这四个区域之间的转换关系如下:

网上找到一张神图,可以完美的看清四个区的关系

 

Workspace: 工作区,就是你平时存放项目代码的地方
Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

这个是什么意思:Changes not staged for commit:
git 分为工作区和版本库,工作区是你的代码,版本库就是git记录了
在修改进入版本库前有一个暂存区也叫索引,就是做git add 操作后记录的区域。当commit的时候是将暂存区的记录添加到版本数据库。你的提示说staged没有内容,也就是说你没有执行过add操作

 

 

五、记录一次git的pull操作

1.提交本地改动时,使用 git add 和 git commit aaa.text -m "message" 

2.然后使用git push origin master 提交到远程主干

3.但是提示fetch first ,原来远程主干上有别人提交过代码,必须先更新

4.使用git fetch orgin master后,再使用git push origin master,依然报错,
大致意思应该是要先把fetch下来的更新merage到本地,此时查看文件夹中的改动,发现还没有变化

5.执行git merge origin/master ,此时查看文件夹,有改动了,把远程的改动已经拉下来了

6.然后再执行git push,发现依然报错,non-fast-forward, 因为虽然merge了,但是这些新的改动没有提交到本地的暂存区,所以得再来一次

7.冲突的文件是aaa.txt,手动修改掉冲突,然后 git add  aaa.text  ,没问题
 git commit aaa.text -m "message" ,报错:can not  do a partial commit during a merge(合并期间不能执行部分提交)

8.原来merge时,不能 git commit 具体某个文件,要直接 git commit -m "mask as resolve lalalala......"这样才行

9.commit 后,继续push ,成功!

总结下:

1.push前先fetch +merge 或者pull

2.若有冲突则解决冲突的文件,然后在add,和commit,commit不能跟具体文件

3.最后再push

 

 

 

有的时候我们在进行项目分支合并 git merge 时会出现如下错误


可以按照以下步骤来解决:

  1. 按键盘上的“i”键可进入插入模式
  2. 这时可以修改最上方的黄色部分,改成你想写的合并原因
  3. 按键盘上的“Esc”键退出插入模式
  4. 最后在最下面输入“ :wq ”后按回车键即可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值