git学习

参考廖雪峰的GIT教程

一、初始化一个Git仓库,使用git init命令。

添加文件到Git仓库,分两步:

  1. 使用命令git add <file>,注意,可反复多次使用,添加多个文件;
  2. 使用命令git commit -m <message>,完成。

二、git status命令可以让我们时刻掌握仓库当前的状态

  git diff顾名思义就是查看difference,看具体修改了什么内容

三、

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

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

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

四、工作区和版本库

  工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

  Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一  个指针叫HEAD。即版本库包含三个东西--暂存区、master,HEAD。

五、管理修改

  Git跟踪并管理的是修改,而非文件。

  发生多次修改后都要git add ,否则git commit后,未git add的修改将不会被提交到master中。

六、撤销修改

  1.git checkout -- file可以丢弃工作区的修改

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

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

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

  2.git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区:

   你作的修改被提交到了暂存区,可以利用它把暂存区的修改撤销掉,再用用命令git checkout -- file撤销工作区的修改。

  小结:  

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

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

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

七、删除文件

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

  这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了。

  如果确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit,文件就从版本库中被删除了。

  如果是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本git checkout -- test.txt。

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

  至于撤销删除,参考“撤销修改”以及“版本回退”。

八、SSH Key

  本地Git仓库和GitHub仓库之间的传输是通过SSH加密的。shell中执行

  ssh-keygen -t rsa -C "youremail@example.com"

  你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可。

  cd~(进入用户主目录) cd .ssh(进入.ssh目录) ls(列出.ssh目录的文件,可以看到id_rsa id_rsa.pub两个文件) cat ~/.ssh/id_rsa.pub(可以看到id_rsa.pub文件的  内容,复制即可)。

  登陆GitHub,打开“Account settings”,“SSH Keys”页面: 然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。

  最后,点“Add Key”,你就应该看到已经添加的Key。

九、添加远程库:(现有本地库,关联到远程库)  

  要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git

  关联后,使用命令git push -u origin master第一次推送master分支的所有内容;

  此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;

十、从远程库克隆到本地

  要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆

  git clone git@github.com:path/repo-name.git

  你也许还注意到,GitHub给出的地址不止一个,还可以用https://github.com/michaelliao/gitskills.git这样的地址。实际上,Git支持多种协  议,默认的git://使用ssh,但也可以使用https等其他协议。

  使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https

十一、创建与合并分支  

  Git鼓励大量使用分支:

  查看分支:git branch

  创建分支:git branch <name>

  切换分支:git checkout <name>

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

  合并某分支到当前分支:git merge <name>

  删除分支:git branch -d <name>

十二、解决冲突  

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

  解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交

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

   git log --graph --pretty=oneline --abbrev-commit

十三、分支管理策略  

  首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

  那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支  发布1.0版本;

  通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。

  如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

  准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward

  git log --graph --pretty=oneline --abbrev-commit

十四、BUG分支 

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

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

  git stash可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作。

  git stash list查看工作现场存储在哪。

  恢复工作现场:1.用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

            2.用git stash pop,恢复的同时把stash内容也删了

  你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:$ git stash apply stash@{0}

十五、Feature分支(强行删除该分支)

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

  如果要丢弃一个没有被合并过的分支,使用git branch -d <name>时git会提醒,使用可以通过git branch -D <name>强行删除。

十六、多人协作

  1.要查看远程库的信息,用git remote,或者用git remote -v显示更详细的信息。

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

     的远程分支上:git push origin master。如果要推送其他分支,比如dev,就改成:git push origin dev。

  3.抓取分支。

  你的小伙伴要在dev分支上开发,就必须创建远程origindev分支到本地,于是他用这个命令创建本地dev分支:

  git checkout -b dev origin/dev

  现在,他就可以在dev上继续修改,然后,时不时地把dev分支push到远程:git push origin dev

  如果你同样修改了

  

  因此,多人协作的工作模式通常是这样:

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

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

  3. 如果合并有冲突,则解决冲突,并在本地提交;

  4. 没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!

  如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to     <branch-name> origin/<branch-name>

  这就是多人协作的工作模式,一旦熟悉了,就非常简单。

  小结

  • 查看远程库信息,使用git remote -v

  • 本地新建的分支如果不推送到远程,对其他人就是不可见的;

  • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;

  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name

  • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

十七、标签管理之创建标签

   标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。

   命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id,git tag <tagname> <id>;      

      命令git tag -a <tagname> -m "blablabla..."可以指定标签信息;

   用git show <tagname>查看标签信息;

   命令git tag可以查看所有标签。

十八、标签管理之操作标签  

  • 命令git push origin <tagname>可以推送一个本地标签;

  • 命令git push origin --tags可以推送全部未推送过的本地标签;

  • 命令git tag -d <tagname>可以删除一个本地标签;

  • 命令git push origin :refs/tags/<tagname>可以删除一个远程标签。

  • 如果标签被推送到了远程,要删除远程标签,先从本地删除,再从远程删除。

 十九、使用github

  

如何参与一个开源项目呢?比如人气极高的bootstrap项目,这是一个非常强大的CSS框架,你可以访问它的项目主页https://github.com/twbs/bootstrap,点“Fork”就在自己的账号下克隆了一个bootstrap仓库,然后,从自己的账号下clone:

 

git clone git@github.com:michaelliao/bootstrap.git

 

一定要从自己的账号下clone仓库,这样你才能推送修改。如果从bootstrap的作者的仓库地址git@github.com:twbs/bootstrap.git克隆,因为没有权限,你将不能推送修改。

 

Bootstrap的官方仓库twbs/bootstrap、你在GitHub上克隆的仓库my/bootstrap,以及你自己克隆到本地电脑的仓库,他们的关系就像下图显示的那样:

 

┌─ GitHub ──────────────────────────────────── ┐
│                                                                                   │
│ ┌─────────────────┐     ┌─────────────────┐ │
│ │ twbs/bootstrap                   │──>│      my/bootstrap                │ │
│ └─────────────────┘     └─────────────────┘ │
│                                                                    ▲             │
└──────────────────────────────────┼──────┘
                                                                      ▼
                                                            ┌───────────┐
                                                            │ local/bootstrap      │
                                                            └───────────┘

 

posted @ 2019-08-15 11:41  椰汁软糖  阅读(113)  评论(0编辑  收藏  举报