• 廖雪峰git教程学习笔记2


       本地git仓库和github仓库之间的传输是通过SSH加密的,所以:

    1. 注册GitHub账号
    1. 创建SSH key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

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

    2. 登陆GitHub,打开account setting,增加SSH key
      GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。

    如果在本地创建了一个git仓库,又在GitHub创建了一个,并且想让这两个仓库同步,步骤:

    1. 登陆GitHub,create a new repo,在本地仓库目录下运行命令: 

      git remote add origin git@github.com:[GitHub账户名]/[GitHub仓库名].git

      上面的[GitHub账户名]用自己的GitHub账户名替代,[GitHub仓库名]用欲关联的GitHub仓库名替代,origin是默认的Git远程仓库叫法,也可以改成别的(注意冒号后没有空格)
    1. 把本地仓库的内容同步到远程仓库:

      git push –u origin master

      加了-u是第一次推送master分支时的写法,Git不但会把本地的master分支内容推送到远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令,以后的推送可以不加

    从远程仓库克隆:

    如果先建立了远程仓库,想要把他克隆下来:

    1. 将命令行目录切换到欲生成本地仓库的目录
    2. 输入命令:

      git clone git@github.com: [GitHub账户名]/[GitHub仓库名].git

    master是git 的一个主分支,在仓库中还可以有很多分支,用git branch 分支名 创建,HEAD是一个指针,指向哪个分支就说明正在哪个分支上工作,在命令行窗口中输入命令git branch,可以查看仓库中有哪些分支,前面带*号的说明HEAD指向这个分支(正在这个分支工作):

    分支管理:

    在之前的提交里,一直只有一条分支master,HEAD指向的分支,表示当前正在工作的分支,修改或创建新文件后产生的新提交都增添到这个分支里,

    每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长。

    当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:

     修改或创建新文件后产生的新提交都增添到dev这个分支里(∵HEAD指向dev),master分支不会产生新的提交!也就是其内容不会被改变!

    当在dev上的修改完成后,想要把他合并到master里,则只需要将master指针指向dev,之后也可以把dev指针删除掉。

     

    查看分支:git branch

    创建分支:git branch <name>

    切换分支:git checkout <name>

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

    合并某分支到当前分支:git merge <name>(注意合并分支时HEAD指向的当前分支,<name>写的是非HEAD指向的分支)

    如果合并时采用命令(加上no—ff,表示禁用fast forward):

    git merge --no-ff -m "common" <name>

    合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史(用git log –graph查看)有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并

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

     

    解决冲突:

    假设在dev分支修改了仓库中的某个文件并提交,再切换回master,打开这个文件,会发现在dev中做的修改并没有出现在这里,如果我们此时再对这个文件做修改并提交,再使用git merge命令合并两个分支时就会产生冲突错误,可使用git status查看冲突内容,再次打开这个文件,会发现冲突内容被写入这个文件,此时需要在这个文件里手动修改解决冲突,再次用git merge命令合并分支

     

     

    临时退出:

    假设当前分支a下的工作没有完成,新创建的文件或新的修改还没完成还不能提交,又需要退出去分支b做别的工作,就需要git stash命令,将当前工作储藏起来,再用git checkout  b切换到分支b去做别的工作,完成别的工作之后,要回到原来的工作,需要在再回到分支a,此时用git status命令查看工作区可见工作区是干净的,需要使用git stash pop(stash内容删除,可使用git stash list命令查看stash内容)git stash apply(stash内容不删除)命令来恢复原来的工作。

     

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

     

    查看远程仓库信息:git remote(或git remote –v查看更详细信息)

    推送分支:git push origin master

    推送其他分支,比如devgit push origin dev

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

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

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

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

     

     

    使用git clone从远程库克隆后得到的本地库只有master分支,如果需要在dev上进行开发,则需要使用以下命令创建本地dev分支:

    git checkout -b dev origin/dev

    这样以后就可以把修改后的dev分支push到远程库,如果有人先推送了新的提交到origin/dev,则后来者再推送就会产生冲突,解决方法:使用

    git pull

    命令把最新的提交从origin/dev抓取下来,然后再本地合并,方法和解决冲突中一样,再push回去

     

    若提示:There is no tracking information for the current branch. Please specify which branch you want to merge with。。。。

    表示没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置devorigin/dev的链接:

    git branch --set-upstream-to=origin/dev dev

    即:

     

     

    可使用git remote –v查看远程库名和地址:

     

  • 相关阅读:
    SDUT OJ 河床
    BZOJ 1500: [NOI2005]维修数列( splay )
    BZOJ 2049: [Sdoi2008]Cave 洞穴勘测( LCT )
    BZOJ 3401: [Usaco2009 Mar]Look Up 仰望( 单调栈 )
    BZOJ 1552: [Cerc2007]robotic sort( splay )
    BZOJ 1251: 序列终结者( splay )
    BZOJ 1576: [Usaco2009 Jan]安全路经Travel( 树链剖分 )
    BZOJ 3408: [Usaco2009 Oct]Heat Wave 热浪( 最短路 )
    BZOJ 3403: [Usaco2009 Open]Cow Line 直线上的牛( deque )
    BZOJ 3407: [Usaco2009 Oct]Bessie's Weight Problem 贝茜的体重问题( dp )
  • 原文地址:https://www.cnblogs.com/tan-wm/p/9341405.html
Copyright © 2020-2023  润新知