zoukankan      html  css  js  c++  java
  • GitHub的使用

    创建分支:b1
    git branch b1
    查看所有分支
    git branch
    创建后master分支和b1分支指向同一个commit
    但是当前分支还是在master分支上,HEAD指向master
    如何切换分支?
    git checkout b1 //切换后HEAD指向了b1
    假如在b1分支上创建test文件并提交到仓库
    touch test
    git add .
    git commit -m "commit test on branch b1"
    git log --oneline --decorate
    ll //工作区多了test文件
    这样,b1分支指向了新的commit,master分支还是指向之前的commit
    再切换到master分支:
    git checkout master
    ll //在master分支下,工作区没有test文件

    /*
    结论:在多人协同工作时,每个人创建一个分支,自己在自己的分支上工作,各个分支之间互不影响,每个人一个HEAD只能指向自己工作的分支
    */
    此时,b1分支比master分支多前进了一步,现在让master分支也前进一步
    git checkout master //切换到master
    touch mm.txt
    git add .
    git commit -m "commit mm.txt on branch master"
    现在两个分支master和b1都从同一个commit延伸出来一步,两个分支master、b1都能通过log向前找到共同的commit,
    现在在这个commit上让他们进行合并:
    git checkout master //先切换到主分支
    git branch
    git merge b1
    git log --oneline --decorate
    合并后master分支包括了之前b1的commit,master的commit,合并之后的commit
    这是没有冲突的情况下,不报错
    如果都对同一个文件做了修改怎么样
    git checkout master
    echo 'master' >> a
    git add .
    git commit -m "modify a on master branch"
    git log --oneline -- decorate

    git checkout b1
    git branch
    echo "ttt" >> a
    git add .
    git commit -m "modify a on b1 branch"
    有冲突的情况下合并:
    git checkout master
    git merge b1 //会提示失败。冲突了
    vim a //里面会展示冲突的内容,需要手工处理
    处理完后,
    git add .
    git commit -m "merge b1 to master both modify a"
    // git commit -m "备注" 备注里写什么都行

    删除分支,例如合并到主分支后需要删除别的分支
    git branch -d b1


              

    标签:一般命名为V1.0 V1.1等等,标签是也是指向commit的指针,用来标识一个commit
    因为如果用ID来标识commit,那个ID是一串乱七八糟的字符串,看起来没有意义

    git的标签的指针是不能变的,针对某次commit使用

    先看看有哪些commit:
    git log --oneline
    不指定就是最后一次commit,执行后再输入描述信息
    git tag -a v1.0
    指定ID=aa27de7的commit打标签,执行后再输入描述信息
    git tag -a v2.0 aa27de7
    查看有哪些tag
    git tag
    查看v1.0标签的详细信息
    git show v1.0
    通过标签回到v2.0的commit状态
    git reset --hard v2.0

    拉取代码:
    1.通过分支拉取
    2.通过tag拉取
    3.通过commit对象拉取,需要知道ID

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

     新建仓库时,暂时不选这个

    1.登录GitHub
    2.在GitHub上创建仓库
    输入仓库名称"myrepo"
    选择public还是private
    点击创建
    3.创建成功后有两种方式连接到仓库:HTTPS和SSH
    4.可以将本地仓库推到GitHub公共仓库上,使用HTTPS的方式
    //把本地和远程进行连接,"origin"是远程仓库的名称,可以随便命名,习惯命名为"origin"
    //使用HTTPS要输用户和密码
    git remote add origin https://github.com/revo666/myrepo.git
    git remote
    如果报错,提示'remote origin already exists.'就执行`git remote rm origin`
    //本地仓库和远程进行同步
    git push -u origin master
    //Branch 'master' set up to track remote branch 'master' from 'origin'.
    5.使用SSH的方式
    git remote add origin git@github.com:revo666/myrepo.git
    git remote
    ssh-keygen -t rsa //本地生成公钥和私钥
    ll ~/.ssh/ //生成了两个文件
    cat ~/.ssh/id_rsa.pub //把这个公钥内容复制进GitHub的SSHKey里
    git push -u origin master //成功
    6.GitHub的代码进行克隆
    //克隆下来的仓库就自动添加了origin,修改完直接push就行
    git clone https://github.com/revo666/myrepo.git
    7.注意:
    如果某人A克隆了一份,B也克隆了一份,B修改后进行提交,成功。
    此时A把本地的内容进行修改,再提交,会提示失败。
    因为本地分支和远程分支有区别,解决办法是把GitHub内容拉下来和本地进行合并在进行推送
    拉取GitHub内容:
    git fetch //拉取位置origin/master
    git merge origin/master //合并
    git push -u origin master //成功
    总结:
    用户A把仓库推上去了,B把clone下来,A修改后推上去了,B就推不上去了
    因为GitHub和本地不一致了,需要把GitHub的内容fetch下来,跟本地master合并,
    合并完了再推就行了
    GitHub的特点:
    多人协作时,每个人clone的时候都是向master上合并。

    从GitHub拉代码和编辑完再推送代码步骤(只在master分支上操作):

    1.登录GitHub,建仓库

    2.设置远程GitHub仓库地址

    3.把本地master推到GitHub

    4.配置公钥,以后用SSH协议推代码都不验证身份

    本地生成公钥私钥

    5.打开公钥,设置到GitHub上

     

    如果新来了一个员工只让他对参与的项目有权限,可以加在项目下:

    6.修改本地Git配置,将HTTPS仓库路径改为SSH的路径

     

     再推,就不需要认证了。

     拉代码:

     你拉完代码之后对代码进行修改(在master分支上),修改完了再推,可能会报错,与GitHub的master分支发生冲突

     执行`git pull`命令将冲突的文件拉取下来(只拉冲突的文件,会把你的代码和冲突的代码放在同一文件中):

     例如:

    GitHub开发流程:

     假如你正在coding,老板临时让你改一个bug,你怎样保存你手上的工作?

    你可以选择将自己的分支推到GitHub,保持工作区干净,再去修改bug。(当然修改bug也要创建一个分支,修改完后合并到master,再将bug分支推到GitHub)

    也可以选择git stash将工作区保存(了解,我只选择上面的方法)

    如果有不需要git进行管理的文件(git不会推到GitHub),可以配置ignore文件。

    官方已经把各个语言的ignore写好了,你只需要复制粘贴就行。

    https://github.com/github/gitignore

    在项目根目录下创建:.gitignore文件,把内容复制粘贴进去

    怎样贡献源码?拿python举例

    1.先把python源码fork到自己的账号下

     2.修改源码

    3.按提示一直下一步,点就行了,不需要配置,也不需要填什么东西

  • 相关阅读:
    这样的程序员创业有戏
    一个29岁总裁对大学生的16条忠告
    向C#的String类添加按字节截取字符串的扩展方法
    妙用SQL Server聚合函数和子查询迭代求和
    为什么要在定义抽象类时使用abstract关键字
    C# 抽象类
    C# 虚函数和重载函数
    在指定文本里记录内容
    静态和非静态方法
    抽象类
  • 原文地址:https://www.cnblogs.com/staff/p/11543874.html
Copyright © 2011-2022 走看看