zoukankan      html  css  js  c++  java
  • Git & Github 一页简明笔记(转)main


      使用方法:常用命令供随时查阅,其余内容供新手了解。

    0. 常用命令一览

    复制代码
    # 配置仓库命令(项目名:play,项目发起者的名字:icedream61,URL=get@github.com:icedream61/play.git)
    git clone URL                    # 第一次克隆远程仓库,并关联:远程仓库 -> 本地仓库
    git remote add origin URL        # 第一次推送本地仓库,并关联:本地仓库 -> 远程仓库(远程仓库名习惯起为origin,请入乡随俗)
    
    # 配置分支命令(分支名:dev,远程仓库名:origin)
    git checkout -b dev origin/dev   # 第一次克隆远程分支,并关联:远程分支 -> 本地分支
    git push -u origin dev           # 第一次推送本地分支,并关联:本地分支 -> 远程分支
    
    # 调试命令
    git remote                       # 查看远程仓库名(如origin)
    git remote -v                    # 查看远程仓库库的名字、URL地址以及自己拥有的权限(fetch & push,即 克隆 & 推送)
    git branch                       # 查看本地所有分支,以及自己当前所处的分支(前面有星号)
    git status                       # 查看本地工作区、暂存区状态
    git tag                          # 查看本地所有标签
    git show <tag>                   # 查看对应标签详细信息
    git log                          # 查看所有历史版本(详细信息)
    git log --pretty=oneline         # 查看所有历史版本(一个版本一行信息)
    git reflog                       # 查看所有历史操作(同样可以加单行参数,不过貌似没区别)
    
    # 协同开发命令
    git pull                         # 克隆全部远程分支:远程仓库 -> 本地仓库
    git push origin <branchs>        # 推送本地分支:本地仓库 -> 远程仓库(分支名以空格分割)
    git push origin <tags>           # 推送本地标签:本地标签 -> 远程标签(标签名以空格分割)
    git push origin --tags           # 推送全部本地标签:本地标签 -> 远程标签
    
    # 单机开发命令
    git add <files>                  # 添加文件:工作区 -> 暂存区(文件名以空格分割)
    git add -A                       # 添加所有文件:工作区 -> 暂存区(参数-A也可以写成--all)
    git commit -m ".."               # 提交所有文件:暂存区 -> 本地仓库(""中的注释一定写清楚~)
    git checkout -- <files>          # 撤销文件在工作区的修改:暂存区 -> 工作区
    git reset HEAD <files>           # 撤销文件的提交:本地仓库 -> 暂存区(就是回退到当前版本^_^)
    git reset HEAD                   # 撤销所有文件的提交:本地仓库 -> 暂存区
    rm <files>                       # 删除工作区的文件(这个按说不算git命令=_=)
    git rm <files>                   # 删除暂存区的文件
    git reset --hard commit_id       # 切换到指定版本(commit_id可以改成HEAD、HEAD^、HEAD^^、……,即当前版本、上一版本、……)
    
    # 单机分支管理命令
    git branch dev                   # 创建dev分支
    git checkout dev                 # 切换至dev分支
    git checkout -b dev              # 创建并切换至dev分支
    git merge my_dev                 # 将my_dev分支合并到当前所处分支中(通过git branch命令查看当前所处分支)
    git branch -d my_dev             # 删除my_dev分支
    
    # 单机标签管理命令
    git tag <tagname>                # 为当前版本(HEAD指向的版本)打一个标签
    git tag <tagname> commit_id      # 为指定版本(commit_id对应版本)打一个标签
    git tag -a <tagname> -m ".."     # 为当前版本打一个标签,加上备注信息
    git tag -d <tagnames>            # 删除本地标签(标签名以空格分割)
    复制代码

    1. 安装Git

      检查是否安装:命令行下输入git,能找到命令即可。

    Mac OS X 已预置
    Ubuntu sudo apt-get install git
    较老的Ubuntu 或 其余Linux系统 从Git官网源码安装,详见廖雪峰的Git教程
    Windows 详见廖雪峰的Git教程

      Git安装之后,需要在命令行写三条命令设置下:

    git config --global user.name "icedream61"                # 建议和github保持一致
    git config --global user.email "icedream@sjtu.edu.cn"     # 建议和github保持一致
    git config --global color.ui auto

    2. 熟悉Github

      首先要去Github上面注册一个账号,具体细节见官网。

      登陆进去Github,随时点左上角的小猫头像便可以回到主页。主页上方搜索框可以搜索开源项目,四张醒目的图片是Github的官方使用教程(显然是英文),下面左侧是你所参与项目的近期动态,右侧则是你所参与的项目列表。在这里,你可以看到 +New repository 按钮,用来创建新项目的按钮。

      在Github中,创建项目又叫创建项目“仓库”(repository)。因为Github一个项目就是一个存放代码的仓库,大家都可以来看代码、下载代码……

      Github是允许你在线改代码的,但往往在线修改并不容易(如Android代码,显然下载到本地用IDE才是正道),因此往往大家都下载代码在本地修改,改好了传上去。下载上传代码有两种方式,一种是点按钮的,一种是命令行的,这里只介绍命令行的。

      Github是基于一个叫Git的命令行工具的,这东西的历史详见廖雪峰教程开篇的Git简介。日常使用中,Github是需要和Git协同工作的,一般流程都是这样:

    新建项目

    上Github,新建一个项目仓库,做好基本设置,写好简介

    这样,你和别人便都可以看到这个项目了

    下载代码

    上Github,找到项目,在页面右侧下方找到clone URL,选择传输方式(SSH最快),点击按钮复制网址

    进入本地某目录(如workspace),输入命令:git clone URL(刚才的网址),选择yes

    假如刚才的项目叫play,你现在本地便会多个目录workspace/play/,里面是项目的全部代码

    3. 设置SSH KEY

      本地Git和远程Github通信是采用ssh协议的,因此需要设置ssh密钥。

      如果目录~/没有.ssh目录,则需要创建ssh密钥,命令:ssh-keygen -t rsa -C "youremail@example.com"(换成你的邮箱)

      上Github,右上角点你自己的头像,选settings;左侧,选择SSH keys进入;选Add SSH key,写个Title,把~/.ssh/id_rsa.pub内容复制到文本框Key,点Add key。

      搞定。

      对了,给Github设置ssh密钥,你的邮箱应该会收到邮件提醒的~

    4. 仓库(又称版本库)与远程仓库、版本控制、分支、标签

      这几个概念必须清晰,这里只做简述,详见廖雪峰教程。

      在Git中,有仓库和工作区之分。以刚才的play项目为例,你项目根目录workspace/play/便是你的工作区,而仓库则是workspace/play/.git/目录(隐藏的)。你平时工作就在工作区工作,文件随便改;想保存了,就利用Git的命令存入仓库;想恢复了,就利用Git的命令从仓库恢复,这样工作区便成了你之前保存的样子。

      远程仓库,就是像Github这样的地方。本地的修改,上传到远程仓库,可以免得本地代码丢失,以及方便大家协同工作、方便发布代码。

      Git会把每个版本都存一份,而HEAD指针指向当前版本。你用git clone下载的就是HEAD指针所指的版本,而你可以查看所有版本信息,可以用HEAD指向任何之前的版本,便退回去了。

      Git有飞快的分支管理(比别的类git软件分支管理快得多),比如play这个项目上线了,大家开始用稳定版。而你们团队打算继续开发,有开发UI界面的、游戏内核的等等,那么你们便需要各自创建自己的分支去开发,此时你们便依旧可以正常从Github上传和下载代码,而由于所处分支不同,你们各自的开发进度、你们的开发和上线的版本都不会互相影响。等各自开发完了,再把各个分支合并起来,形成新的版本继续开发和发行。

      Git有标签管理,你可以给某个版本打上独特的标签,这样以后便可以轻松定位到了。例如发行什么1.0版、2.0版,开发1.1版、1.1.3版之类的,随你喜欢。

      熟练使用这些功能,可以极大提高开发效率。

    5. 如何本地开发

      想要本地开发,这个大家先要理解了Git的几个文件存储区:(依旧以workspace/play/目录为例)

        (1)工作区:就是这个workspace/play/目录,除了里面的.git文件夹之外,都算做工作区。就是本地一个文件目录,该怎么开发怎么开发就好。

        (2)暂存区:在.git中的一个地方,如果这里没有和本地仓库的当前版本完全同步,工作区就被称为是“不干净的”。

          (我没看错的话,廖雪峰教程中给的暂存区实际目录应该已经过时,大家请去自行查阅资料,找到真正的暂存区所在+_+)

        (3)本地仓库:也在.git中的一个地方……这里面存着所有版本和所有信息,全都不会删,可以从这里随时找到任何一个版本。

        (4)远程仓库:在Github上,这里不具体讲解。

      然后,自己灵活使用命令就好。而且不同小组开发情况不同,也无法一概而论,就不赘述了,只说下三个区。

    6. 小组协作方式

      我们假设情况很简单:有一个master是发行版,一个dev是开发版,然后每个人有自己的一个分支。

      首先是A同学创建好项目:

        (1)在Github上创建一个项目仓库,写好使用方法。

        (2)找个目录,输入:git clone URL,把仓库内容clone下来。

        (2+)在工作区输入:git remote -v,确认远程库的名字、地址以及自己拥有的权限(fetch&push)。

        (2+)在工作区输入:git branch,确认当前只有master分支,并且master前面有个星号(*表示当前正处于此分支下)。

        (3)写好master分支(发行版),写入本地仓库,在工作区输入:git push origin master,推送分支。

        (4)在工作区输入:git checkout -b dev,创建并切换到dev分支。当然,依旧可以用git branch确认。

        (5)写好dev分支(开发版),写入本地仓库,在工作区输入:git push -u origin dev,推送分支。

      然后去通知所有同学来参与项目,而参与项目的B同学则要这样:

        (1)在Github上找A同学要到push代码的权限(否则只能clone下来,不能push修改)。

        (2)找个目录,输入:git clone URL,把仓库内容clone下来。

        (3)在工作区输入:git checkout -b dev origin/dev,创建一个dev分支并和远程dev分支关联起来。(提交时可以指定分支,因此本地分支不需要与远程分支进行强相关。)

      这样一来,所有同学便都可以在本地开发并协同工作了,具体流程就像这样:

        (1)在工作区输入:git checkout -b <name>,创建自己的分支。

        (2)使用:git push -u origin <name>,首次提交,在远程仓库创建此分支。

    -u, --set-upstream
    For every branch that is up to date or successfully pushed, add upstream (tracking) reference, used by argument-less git-pull(1) and other commands.

    著作权归作者所有。 商业转载请联系作者获得授权,非商业转载请注明出处。 作者:王轩 链接:http://www.zhihu.com/question/20019419/answer/48434769 来源:知乎
    upstream不是针对远程仓库的,而是针对branch的,这一点应了那位童鞋所说的第二句话。但是upstream和有几个远程库没有必然联系。比如远程库A上有3个分支branch1、branch2、branch3。远程库B上有3个分支branchx、branchy、branchz。本地仓库有2个分支local1和local2。那么当初始状态时,local1和local2和任何一个分支都没有关联,也就是没有upstream。当通过git branch --set-upstream-to A/branch1 local1命令执行后,会给local1和branch1两个分支建立关联,也就是说local1的upstream指向的是branch1。这样的好处就是在local1分支上执行git push(git pull同理)操作时不用附加其它参数,Git就会自动将local1分支上的内容push到branch1上去。同样,local2分支也可以和远程库A和远程库B上的任何一个分支建立关联,只要给local2分支设置了upstream,就可以在local2分支上用git push(git pull同理)方便地与目标分支推拉数据。 综上所述,upstream与有几个远程库没有关系,它是分支与分支之间的流通道。 再来说说git push -u和git branch --set-upstream-to指令之间的区别。
    举个例子:我要把本地分支master与远程仓库origin里的分支gaga建立关联。
    (如果使用下列途径1的话,首先,你要切换到master分支上(git checkout master))
    两个途径:
    1. git push -u origin gaga 
    2. git branch --set-upstream-to=origin/gaga master
    这两种方式都可以达到目的。但是1方法更通用,因为你的远程库有可能并没有gaga分支,这种情况下你用2方法就不可行,连目标分支都不存在,怎么进行关联呢?所以可以总结一下:git push -u origin gaga 相当于 git push origin gaga + git branch --set-upstream-to=origin/gaga master
    http://www.zhihu.com/question/20019419

        (3)开发

        (3+)随时使用:git push origin <name>,提交代码。

        (3+)随时使用:git pull,取得最新dev代码。

      当自己的开发成果可以合并到dev分支时,先保证本地dev代码是最新的,然后:

        (1)使用:git checkout dev,切换到dev分支

        (2)使用:git merge <name>,将自己的分支合并到dev中

        (3)使用:git push origin dev,将dev分支推送到远程仓库

      一旦要在另一个电脑(或目录)中建立开发环境,则只需要:

        (1)使用:git clone URL,把仓库内容clone下来。

        (2)在工作区输入:git checkout -b dev origin/dev,创建一个dev分支并和远程dev分支关联起来。

        (3)在工作区输入:git checkout -b lq origin/lq,创建自己的lq分支并和远程那个自己之前写着一半的分支关联起来。

      一旦要在两个电脑(或目录)中切换着开发,则只需要:

        (1)切换目录,使用:git pull,得到最新代码。

        (2)开发

        (3)使用:git push origin <name>,把自己的工作进度提交到远程仓库。

    http://www.cnblogs.com/icedream61/p/4887250.html
     
     
  • 相关阅读:
    【NOIP2007】守望者的逃离
    20200321(ABC)题解 by 马鸿儒 孙晨曦
    20200320(ABC)题解 by 王一帆
    20200319(ABC)题解 by 王一帆 梁延杰 丁智辰
    20200314(ABC)题解 by 董国梁 蒋丽君 章思航
    20200309(ABC)题解 by 梁延杰
    20200307(DEF)题解 by 孙晨曦
    20200306(ABC)题解 by 孙晨曦
    20200305(DEF)题解 by 孙晨曦
    20200303(ABC)题解 by 王锐,董国梁
  • 原文地址:https://www.cnblogs.com/softidea/p/4888640.html
Copyright © 2011-2022 走看看