git

作者: 紫色冰雨 | 来源:发表于2018-04-21 22:11 被阅读78次

廖雪峰博客

三、SourceTree&Git部分名词解释

克隆(clone):从远程仓库URL加载创建一个与远程仓库一样的本地仓库

提交(commit):将暂存文件上传到本地仓库(我们在Finder中对本地仓库做修改后一般都得先提交一次,再推送)

检出(checkout):切换不同分支

添加(add):添加文件到缓存区

移除(remove):移除文件至缓存区

暂存(git stash):保存工作现场

重置(reset):回到最近添加(add)/提交(commit)状态

合并(merge):将多个同名文件合并为一个文件,该文件包含多个同名文件的所有内容,相同内容抵消

抓取(fetch):从远程仓库获取信息并同步至本地仓库

拉取(pull):从远程仓库获取信息并同步至本地仓库,并且自动执行合并(merge)操作,即 **pull=fetch+merge**

推送(push):将本地仓库同步至远程仓库,一般推送(push)前先拉取(pull)一次,确保一致

分支(branch):创建/修改/删除分枝

标签(tag):给项目增添标签

工作流(Git Flow):团队工作时,每个人创建属于自己的分枝(branch),确定无误后提交到master分枝

终端(terminal):可以输入git命令行

1  通过git init命令把这个目录变成Git可以管理的仓库:

2  git add  readme.txt  将 readme.txt 添加到 暂存区

3  git commit  -m  "提交日程模块"

4 git log命令显示从最近到最远的提交日志  参数太多可以 

如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:

5 在Git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

6  git reset --HEAD^    回退上一个版本

7 cat readme.txt   命令显示版本库对象的内容、类型及大小信息。

8 然后顺便把工作区的文件更新了。所以你让HEAD指向哪个版本号,你就把当前版本定位在哪。

9 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

现在总结一下:

HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。

穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

 先用git status查看一下状态:

用git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别:

10 命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commit或git add时的状态。

git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。

11 Git同样告诉我们,用命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区

git reset HEAD readMe  把暂存区的修改撤销掉(unstage),重新放回工作区

12 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

3 删除文件

3.1 一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了:

rm text.txt

这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了:

现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit:

现在,文件就从版本库中被删除了

另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:

git checkout     -- test.txt                                                                                             git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容

4远程仓库

把本地仓库的内容推送到GitHub仓库。                                                                     

git remote add origin  git@github.com:michaelliao.learngit.git

请千万注意,把上面的michaelliao替换成你自己的GitHub账户名,否则,你在本地关联的就是我的远程库,关联没有问题,但是你以后推送是推不上去的,因为你的SSH Key公钥不在我的账户列表中。添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

git push -u origin master 

把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样:

4.2 SSH警告

当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告:

这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。

Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表里了:

这个警告只会出现一次,后面的操作就不会有任何警告了。

如果你实在担心有人冒充GitHub服务器,输入yes前可以对照GitHub的RSA Key的指纹信息是否与SSH连接给出的一致。

4.3  现在,假设我们从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆。

git remote add origin  git@github.com:michaelliao.learngit.git

5 分支管理

我们创建dev分支,然后切换到dev分支:

git checkout -b dev 

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:git branch dev         git checkout  dev 

然后,用git branch命令查看当前分支:        

               git branch命令会列出所有分支,当前分支前面会标一个*号。

现在,dev分支的工作完成,我们就可以切换回master分支:git checkout  master 

我们把dev分支的工作成果合并到master分支上  git merge dev            git merge命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。

合并完成后,就可以放心地删除dev分支了:git branch -d dev

5.2  查看分支:git branch

创建分支:git branch

切换分支:git checkout

创建+切换分支:git checkout -b

合并某分支到当前分支:git merge

删除分支:git branch -d

当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

用git log --graph命令可以看到分支合并图。

5.3 修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;

当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

5.4 开发一个新feature,最好新建一个分支;

如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。

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

要查看远程库的信息,用git remote:

6 推送分支,

就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:

git push origin master 

如果要推送其他分支,比如dev,就改成:

git push origin dev

但是,并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?

master分支是主分支,因此要时刻与远程同步;

dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;

bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;

feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定

相关文章

网友评论

      本文标题:git

      本文链接:https://www.haomeiwen.com/subject/jjkflftx.html