您的位置:首页 > 其它

git 学习笔记

2015-10-26 16:18 302 查看

Git使用总结

集中式VS分布式

个人认为就git这种分布式版本管理系统和类似SVN之类的集中式版本控制系统对比,主要有以下一些好处:

git分布式系统上每台主机上都有完整的代码,但是svn上完整的代码是存在在中央服务器上的。git上修改代码之后,会将代码修改提交到每台主机。其实这里更好的理解是,这个是我们本地git的工作区间,服务器的代码是我们的主分支,我们对于服务器来说都是次分支。

git在windows的安装



指令总结

关于工作仓库的解释:工作仓库就是你本地存放代码的文件夹,当然为了避免不必要的工作量,建议完整的路径下不要包含中文字符。

相关指令如下

仓库初始化指令: git init

查看当前repository状态: git status

查看上一次修改: git diff

查看最近修改的日志 git log

回退版本 git reset –hard HEAD^ 可以回退到上一个版本

回退版本 git reset –hard 提交id 可以回退到特定的版本

查看提交id git reflog 这个提交id就是上一个指令中使用的提交id

git相关命令解析:将文件add的时候其实是把文件加入到.git文件夹下的名为stage或者index的缓存工作区中,然后使用完commit命令之后才把文件提交到master仓库。

git checkout –文件名 撤销当前修改

将文件回退到版本库版本,前提是没把修改提交(add)到缓存区

将文件回退到缓存区版本,前提是提交了修改(add)到缓存区

删除文件 git rm 文件名 (然后再commit 你的修改)

远程仓库

这里进行远程仓库的介绍,远程仓库,顾名思义就是远程服务器上的仓库,例如github,京东云汇等代码托管网站上创建的远程仓库。

在git bash中使用以下命令和远程仓库连接(这里不介绍远程仓库的创建)

git remote add origin (其中还有几个参数需要配置)

从远程仓库下载代码 git clone 下载地址

分支管理

分支管理的使用情景主要是在团队开发中,每个人的在自己的工作区间做了工作,然后需要将自己的代码更新给队友,这时候就需要考虑分支合并了,其实每个人的主机相对于服务器来说就是一个分支。其实,我们不可能每个人都在主分支工作,所以,通常我们会创建对于服务器仓库的的分支,然后进行工作。

分支创建 git branch 分支名称

分支切换 git checkout 分支名称

显示分支 git branch (这里的话,带*号的分支是主分支)

合并分支 git merge 分支名称 (将指定分支合并到当前分支)

分支是为了团队合作,所以存在这种情况,分支合并的时候,可能会存在冲突,也就是你们修改了同一个文件的同一行代码的时候,会导致冲突,这是git不会自动把你们的代码合并,所以需要手动解决冲突。

合并分支的时候手动解决冲突的过程

1. 通过 git status 查看冲突文件和冲突情况

2. 手动修改冲突文件的最终方案,然后提交(注意写提交注释)

git上两种合并模式的介绍一种是FAST FORWARD 模式,在这种模式之下,删除分支之后会丢掉分支信息。第二种是–no-ff模式,这种模式下,分支信息不会被删除(分支指针还存在)具体指令如下:

git merge –no-ff -m “merge with no-ff” 分支名称

bug分支的使用

这个新手入职,大部分都是改bug的工作,所以我这里单独的把这个知识拿出来讲一下。很可能存在这样一种情况,你本来有自己相对于服务器仓库的自己一个开发的分支,然后,你这时候来了一个修改bug的任务,但是你的开发分支任务没有完成,这时候你就要考虑,是否需要创建一个分支,来处理这个bug,如果需要的话,你还需要将当前开发分支的状态保留

保留分支状态 git stash

然后你创建了bug分支之后,修改完了,提交到主分支,然后在切换回自己的分支进行工作。

多人开发相关操作

当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。

查看远程库的信息 git remote

查看远程库推送地址 git remote -v

从远程仓库抓取分支 git clone 地址

推送分支到远程服务器 git push origin 推送的分支名称

创建远程的开发分支到本地 git checkout -b 分支名称 origin/分支名称

拉取最新提交 git pull

推送时忽略文件

有时候存在这种情况,你本地的一些配置文件没必要往远程仓库推送(例如android中的 .class文件等)

解决方法如下:

在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。你只需要将你的忽略的文件类型,按照规范写入到这个文件当中去,就可以在提交的时候避免显示这些文件的提交了。

思考问题:

假设分支是:

release 发布分支

dev 开发分支

kl kl的开发分支

yours 你的分支

function1,2,3…n 正在开发的功能分支

bug1,2,3…n

1. 思考一下这些分支哪些应该在服务器端,哪些应该在客户端,应该是怎样一个策略

[code]  由于release版本是发布版本,所以必须是最新的更新,而且必须是完整版本,所以放在服务器上。

  dev的话,在远程仓库也可以建立一个dev分支,用来合并最新的开发进度,这样子就把发布和开发分离开来了

  kl和my分支都是个人开发分支,所以也需要在服务器上建立分支,因为需要将个人开发的代码往dev分支上合并。(个人主机的本地分支直接叫master的话)

  function分支的话,因为需求在变化所以,没必要在服务器上建立特定的分支,个人本地建立一个function分支完成之后,push到服务器即可。主要是考虑到需求的变化比较大。

  bug分支的话,也是建立在个人本地比较好,因为bug分支只是单单某一时期为了修改一个错误,没必要在服务器上建立分支(服务分支在开发周期就像一一条线一样,你bug分支,只能说是生命周期错出来的一个点,所以从分支管理和简洁的角度考虑,没必要在服务器建立bug分支)。


2. git log 和 git reflog的使用和回滚的使用再加强,结合branch

[code]git  log  可以查看到 提交日志 

git reflog  可以查看上一次提交的commit id 

假设我们出现这样一个问题,我在


3. 再深入”理解GIT是基于修改的”,思考GIT COMMIT,到底COMMIT的是什么,COMMIT到哪里,GIT ADD 呢?ADD到哪里?怎样对比两个COMMIT的不同,怎么查看对比上次COMMIT,现在修改了哪些内容,具体修改了哪些内容

[code] 首先要,描述一下仓库之间的关系,个人主机上的git init之后的文件夹是个人的工作区间,然后存在.git这个隐藏文件夹称为缓存区和版本库,然后git会自动帮你创建你的本地分支默认为master。

 你使用add命令的时候,是将工作区的文件或者修改提交到缓存区,然后一系列的add之后调用的commit方法,则是将缓存区的改动推送的本地分支。

 可以通过git diff 指令查看上次的commit 修改了那些部分


4. 如果我开发新功能的时候,忘了新开一个function分支,这时有一个紧急的bug修复。那怎样做?

[code]可以在当前开发分支上使用git stash指令,实现将当前分支的状态保存下来(假设你是在dev分支上进行开发的)

然后你自己需要修复bug的那条分支上新建一个bug分支,进行bug的修复,然后将bug合并后删除,然后切换回你之前的function开发分支。


远程仓库操作 ##

查看所有分支 git branch -a 可以查看到本地分支和远程分支在内的所有分支

创建远程分支

在本地创建分支之后推送到服务器即可,例如:

git branch release

git push origin release

这样就等于现在本地创建了一个 release 分支,然后推送到服务器,等于在服务器也创建了一个新的 release 分支了。

详细的 git 学习教程参考 廖雪峰大神的 《git教程》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: