git 学习

  1. 在github中创建仓库 仓库url=git://github.com/mn/xx.git

  2. 即仓库名/远程主机名/ 别名 一般为origin

  3. master和dev 既可以只本地分支名, 也可以指远程分支名
    pull中: master:master 第一个master为远程分支名
    push中: master:master 第二个master为远程分支名
    origin/master origin/dev 分别为远程master分支和远程dev分支

  4. push前,先pull. pull可能会有代码冲突(解决冲突代码,再commit一次即可)

  5. 获取工程文件到本地
    2.1 配置个人账号
    git config --global user.name “xxx”
    git config --global user.email “xxx@163.com”
    2.2 获取项目到本地(fetch / clone) (仓库关联(remote add)+分支追踪(-u))
    git clone git://github.com/mn/xx.git" //并实现了分支的自动追踪
    关联远程仓库和分支追踪
    //查看关联的远程仓库
    git remote -v
    //将本地项目与远程仓库关联,
    git remote add origin https://git://github.com/mn/xx.git

    //手动将本地分支与远程分支建立追踪关系, 本地分支可能追踪多个远程分支(不常用)
    //该远程分支名使用完整的分支名orgin/master,   pull和push可以使用简写的远程分支名master.
    git branch --set-upstream <本地分支名> <远程分支名>
    git branch --set-upstream master origin/master    本地远程分支名相同, 可以省略最后面的origin/master
    git branch --set-upstream master origin/next //本地master分支追踪远程next分支
    
    //自动建立追踪关系,  比如git clone,  本地和同名远程分支默认建立追踪关系
    //一旦建立追踪关系后, 推送时, 可以简写成git pull origin,如果只追踪一个远程分支, 还可以省略origin(主机名)
    

    git pull

    ==拉取远程项目  pull ==
    git pull <远程主机名> <远程分支名>:<本地分支名>          //(pull的:前后分支名与push的:前后不一致)
    git push <远程主机名> <本地分支名>:<远程分支名>
    -------------------------------------------------
    git pull origin master:master  //最后一个master为当前本地分支
    git pull origin master   //如果当前本地分支不是master分支, 会将远程master分支合并到当前分支
    git pull origin    //本地的当前分支自动与对应的origin主机”追踪分支”(remote-tracking branch)进行合并,  适合所有的分支
    git pull //以上四个等价
    -------------------------------------------------
    git pull origin next //1.取回origin/next分支, 再与当前分支合并(当前分支名不一定为next)
    相当于 git fetch origin     git merge origin/next
    
    (git pull = git fetch + git merge)
    -------------------------------------------------
    git pull origin next   等价于下面两个指令(获取+合并),但是不会将origin/next和当前分支建立追踪关系(放心)
    git fetch origin
    git merge origin/next
    -------------------------------------------------
    (git pull --rebase = git fetch + git rebase)
    

    git merge

    git merge b  //将b分支合并到当前分支
    

    git push

    //推送项目
    git push <远程主机名> <本地分支名>:<远程分支名>
    git push origin dev:dev //第一个dev为本地分支名
    git push origin dev
    git push origin 
    git push //仓库别名为origin,远程分支名和本地分支名一致, 可以简写, 以上四个命令等价
    
    第一次push需要建立追踪关系
    git push -u origin "master"   
    //字符串master为本地分支名
    //其实这条指令有两个功能
    //第一: 将本地的master分支推送到远程仓库origin
    //第二: 在推送前,将本地master分支与远程分支origin/master建立追踪关系
            -u  等价于    --set-upstream
    

    其他命令

    git status 状态  git log 日志
    git branch dev   //创建dev分支
    git checkout -b dev  //创建dev分支,并切换到dev分支
    
    reset 退回到某个版本  (自己本地提交的n个commit,还没push, 随便退回, "某个版本之后的所有commit都清除")
          hard就是坚决删除, mixed在index区还保留(是否确定更改)
          如果退回到某个远程仓库的版本  (只是head退回了, remote的版本还存在, 后续还是要pull)
    revert 退回到某个版本(主要准对部分文件,进行回退, 使用较少)
           所有commit都保留,只是新增一个commit
           什么场景使用: 想要使用某个(退回)版本的文件修改,其他commit修改的文件一律不变
           注意: 只比较当前版本和(退回版本内包含这几个文件)的差异, 进行退回
                其他修改文件不变
    rollback 回滚
    

    如果报错 fatal: remote origin already exists
    执行下面命令
    git remote rm origin
    然后执行
    git remote add origin https://git://github.com/mn/xx.git
    日常操作
    远程仓库建好后, 创建本地仓库并进行关联

    方式1: 按照网站提示的代码 一步步执行指令即可(不常用)

    mkdir xx-xx
    git init
    touch README.md
    git add .
    git commmit -m "first commit"
    git remote add origin http://git:/xx-xx.git
    git push -u origin "master"    //公司中不允许直接推送master分支到远程, 本地测试用
    

    方式2: idea中直接拷贝(推荐)
    close idea
    get from version control

    方式3: 直接在文件夹中克隆代码
    git clone //自动关联项目,并建立分支追踪关系

    方式4: 不使用clone,也不推送master

    git init 
    git remote add origin http://git:/xx-xx.git
    git branch --set-upstream origin master origin/master //维护好一个分支追踪,其他分支追踪自动维护
    
    

公司常规操作

1.给电脑配置SSH, 生成一个key
2.在网站上创建分支(正常都是origin/master拷贝下来)
3.idea中clone项目 get from version control
4.右下角切换分支
5.git pull
6.git commit   n次
7.git push
7.如果要到预发布环境测试, 可以将最新master分支合并到工作分支, 也可以不合并, 等到快要上beta环境前的最后一次预发布环境测试进行合并
8.beta环境上的工作分支要求: 1.已经合并过最新的master 2.合并后且在预发布环境进行发布后

git merge(树状)和 git rebase(线性)比较

git rebase A  //当前分支为B, 就是将B分支上的修改都变基(移到)A分支上

merge前
Alt
merge后

变基前

变基后

代码:

//通过rebase(变基)将yang分支的所有修改都转移至master分支, 注意:使用rebase,yang分支也获取master分支的所有修改,  具体代码如下
git checkout yang
git rebase master //将yang分支的所有修改变基到master(可能有冲突),查看有哪些冲突文件
//解决冲突
//1.所有的冲突文件都在工作空间中都会有标记冲突的位置, 打开这些文件, 进行修改
//2.git add .    提交所有冲突文件
//3.git commit -m "解决冲突"   提交
//4.git rebase --continue //此时完成了变基, master分支还是之前的提交记录
                          //yang分支已经有了master提交的commit, 
                          //因为有了冲突,提交了一次commit
                          //所以两个冲突在时间上最后一次的commit会被冲突的commit覆盖}(没有冲突则
                          //不覆盖?)
git checkout master
git merge yang      //将yang分支合并到当前分支
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值