Git 与GiHub的凄美故事….

  • 2017-09-20
  • 0
  • 0

svn 与git的主要区别

svn集中式版本控制系统,版本库集中放在中央服务器,干活先从中央服务器拉去版本,干完活,推到中央服务器,集中式版本控制系统必须联网才能工作,有局域网还好,不然网速不好就GG了。

git分布式版本控制系统,no中央服务器,每个人电脑都是一个完整的版本库,工作不需要联网,如何多人协作,比如小明在自己的电脑改了a文件,其他人也在电脑上改了a文件,这时,你们两之间只需把各自的修改推送给对方,就可以看到对方的修改了。

git add readme.txt 添加到暂存区里面去

git commit -m” 把暂存区文件提交到仓库或者说当前分支上

git status 查看是否有未提交的文件

git diff readme.txt 查看这个文件做了那些修改,上个版本的文件改动状况

git log 显示从最近到最远的日志,显示详细日志信息

git log –pretty=oneline 显示简约日志信息

git reset –hard HEAD^ 回退到上个版本,以此类推 HEAD^^ 回退两个版本

git reset –hard HEAD~100 回退100个版本 数字代表回退多少个版本

git reset –hard 版本号 回退完,又想回退回来,就用月光宝盒,喊出波若波罗蜜,就可以了

git reflog 回退完之前的版本好都不见了,怎么找到版本号,就用他,一粒就见效

理解工作区与暂存器的区别:

工作区: 就是你在电脑上看到的目录,比如目录下test文件(.git隐藏目录版本库除外)或着以后再新建的目录文件等等都数属于工作区的范畴

版本库:工作区有一个隐藏目录 .git,这个不属于工作区,这是版本库。其中版本库里面存了很多东西,其中最重要的就是stage(暂存区) 还有git为我们创建的一个分支master,以及指向master的一个指针HEAD

修改了readme.txt 在我未提交之前发现添加内容有误,所以马上恢复以前的版本
第一种方式:

git checkout –readme.txt 把readme.txt 文件在工作区做得修改全部撤销,可以丢在工作区的修改

两种情况:
1. readme.txt修改后,还没有放到暂存区,使用撤销修改回到和版本库一模一样的状态。

2. readme.txt已经放入暂存区,接着又做了修改,撤销修改就回到添加暂存区后的状态。

第二种方式:

git reset –hard^ 回退到上个版本

删除文件

rm b.txt

实验:

git add b.txt 添加b.txt文件

git commit 提交了b.txt文件

rm b.txt 删除 b.txt文件

git status 查看状态 显示 del b.txt

有两种情况:

第一:从版本库彻底删除掉, 执行commit 提交,b.txt 被first布拉德了

第二: 只要在删除后没有 commit之前, 恢复怎么吹

git checkout — b.txt 文件被恢复了

远程仓库

git仓库 和 github仓库之间的传输是通过SSH加密的

设置:

1. 创建 SSH Key

先看目录有没有id_rsa && id_rsa.pub 两个文件,有直接跳过

没有的话git命令: ssh-Keygen -t rsa -C “youemail@example.com” 然后揍有了

gitHub —》settings —》 SSH Keys —》 new SSH Key —》title —》 key(id_rsa.pub 内容) –> Add Key –> ok

添加远程仓库

gitHub 创建一个仓库

git remote add origin gitHub上远程仓库地址 添加远程库 Http ssh

git push origin master 把本地master分支的最新修改推送到gitHub上,现在就有了分布式版本库了。

git clone gitHub上远程仓库的地址 克隆远程库 http ssh

创建与合并分支

在版本回退里,每次提交,git都会把他们串成一条时间线,这条时间线就是一个分支,

git 目前只有一条分支,也叫主分支,即master分支,HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支

git branch 查看分支

git branch name 创建分支

git checkout name 切换分支

git checkout -b name 创建并切换分支

git merge name 合并某个分支到当前分支

git branch -d name 删除分支

解决冲突 conflicts fixed

实验:

fenzhi1 readme.txt 添加一行 888888888

git add git commit -m ‘fenzhi1新增内容 8888888’

git checkout master 切换到master分支上 添加一行 999999999

git add git commit -m ‘master分支上新增内容99999999’

git merge fenzhi1 在master分支上合并fenzhi1 显示conflict fixed 产生冲突

git status 查看状态 both:modified: readme.txt

查看readme.txt 内容 冲突代码 <<<<<<<< HEAD ======= >>>>>>>>> fenzhi1

修改成和主干上一样的 master git add git commit -m ‘conflict fixed’

查看合并情况: git log

分支管理策略

通常合并分支时, git一般使用 “Fast forward” 模式,在这种模式下,删除分支后,会丢掉分支信息,使用带参数 -no-ff 来禁用 “Fast forward” 模式

实验:

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

修改readme.txt 内容

git add git commit 添加并提交

git checkout master 切到主分支 master

git merge –no-ff -m “merge with no-ff” dev 合并dev分支 -no-ff表示禁用 Fast forward 模式 中间是注释

git log –graph –pretty=oneline –abbrev-commit 查看历史情况

可以看到被删除的分支信息还在

git branch -d dev 删除dev分支 显示删除的信息(was 版本号) 在历史情况中可以找到

分支策略:

首先master主分支应该非常稳定的,也就是用来发布新版本的,一般情况下不允许在上面干活,干活一般情况下在新建的dev分支上干活,干完活,比如要发布,或者dev分支代码稳定后可以合并到主分支master上来。

bug分支:

在开发中,会经常碰到bug问题,那么有了bug就需要修复,在git中,分支是很强大的,每个bug都可以通过一个临时分支来修复,修复完成后,合并分支,然后删除临时分支。

实验:

在开发当中接到一个404 bug时候,我们可以创建一个404分支来修复它,但是,当前的dev分支上的工作还没有提交。

git status 查看当前dev分支的状态,modified : readme.txt

工作做到一半时候,还不能提交,怎么办,还好git提供了一个stash功能,可以把当前工作现场隐藏起来,等以后恢复现场后继续工作。

git stash 将当前的工作现场隐藏起来

git status 查看状态,是干净的

现在我们可以通过创建issue-404分支修复bug了。

首先我们要确定在那个分支上修复bug,举个栗子我们现在是在主分支master上来修复的,现在我要在master分支上创建一个临时分支

git checkout -b issue-404 创建并切换到issue-404分支

修改完: git add git commit -m ‘fix bug 404’

git checkout master 切到master分支上

git merge –no-ff -m “merge bug fix 404″ issue-404 合并分支后查看内容和issue-404 内容一致,并合分支

git branch -d issue-404 在master分支上删除呢临时分支issue-404

现在,我们回到dev分支上干活了。

git checkout dev 从master分支切到dev分支上

git status 目前是干净的

工作现场去哪了??

git stash list 查看隐藏的现场

第一种:git stash apply 恢复,恢复后,stash内容并不删除,你需要使用命令 git stash drop 来删除

第二种: git stash pop 恢复的同时把stash内容也删除了。

多人协作

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

1. 要查看远程库的信息 git remote

2. 要查看远程库的详细详细 git remote -v fetch 抓去 push 推送

git push origin master 推送到远程库

抓取分支

多人协作时,大家都会往master分支上推送各自的修改,现在我们可以模拟另一

个同事,或者同一台电脑的不同目录克隆,新建一个目录名字叫testgit2

首先把dev分支也要推送到远程去:

git push orgin dev 把dev分支推送到远程去

接着进入testgit2目录,进行克隆远程的库到本地:

git clone https://github.com/…..

现在同事要在dev分支上做开发,就必须把远程的origin的dev分支到本地来:

git checkout -b dev orgin/dev 创建远程origin的dev分支到本地来

开发完:

git add readme.txt git commit -m ” git push origin dev 把现在的dev

分支推送到远程去

我同样在dev做了修改:

git push origin dev 推送到远程库时发生错误,不同的人推同样文件,修改同

个文件地方报错

由此推断失败了,怎么办:

先用 git pull 把最新的提交从origin/dev 抓取下来,然后在本地合并,解决冲

突,再推送。

根据提示 git branch –set-upstream-to=origin/ dev

git pull 也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接

;根据提示,设置dev和origin/dev 的链接:

git branch –set-upstream dev origin/dev

git pull 抓取成功了,但是有冲突,需要解决,再pull

解决方法和分支管理中的 解决冲突完全一样,解决后,提交,在push

因此:多人协作工作模式一般是这样的:

1.首先,可以试图用git push origin branch-name 推送自己的修改

2.如果推送失败,则因为远程分支比你的本地更新早,需要先用git pull 试图合

并。

3.如果合并用冲突,则需要解决冲突,并在本地提交,再用git push origin

bran-name推送。

git基本常用命令:

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

pwd 显示当前位置 显示当前目录的路径

git init 初始化git仓库 把当前的目录变成可以管理的git仓库,生成隐

藏.git 文件

git add xx 添加到暂存区

git commit -m” 提交到仓库

git status 查看当前状态

git diff xx 查看xx文件修改信息

git log 查看提交日志

git reset –hard HEAD^ / git reset –hard HEAD~ 回退一个版本

cat xx 查看文件内容

git reflog 查看历史情况

git checkout –xx 恢复删除的文件

git rm xx 删除文件

git remote add origin xxx 添加到远程仓库 关联一个远程库

git push -u 推送到远程仓库

git clone xxx 克隆到本地

git checkout -b dev 创建并切换分支

git branch 查看分支

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 remote 远程仓库信息

git remote -v 详细的远程仓库信息

git push origin master 把本地master分支推送到远程库master分支上

评论

还没有任何评论,你来说两句吧