• git操作详解


    前言:一般公司git的master主干与线上代码保持一致,在使用git的时候,偶尔会发生一些莫名其妙的事情,很容易导致运营事故。so~ 总结一下经常使用的git命令以及git的一些小坑,方便日后查阅
     
    日常开发中Git的一般使用步骤:
    1. 位于master分支下,先同步为最新代码
    git pull            // 有冲突时,解决冲突。
     
    2. 创建并切换到新的本地分支下处理新特性abc
    git checkout -b feature_abc
     
    3. 新特性abc处理完成,假设需要交接给同事b处理,那么推送本地分支为远程分支.
    如果你时间紧急,可以直接使用下面的命令
    git add -A
    git commit -m '修改的说明'
    git push origin feature_abc:feature_abc    //   git push <远程主机名> <本地分支名>:<远程分支名> 
    【小技巧:分支推送顺序的写法是<来源地>:<目的地>,所以git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>。】
     

    如果你有时间,可以看一下下面的坑出没
    1.git add . or [git add -A] 这2个命令的作用是什么? 【注意:这2个命令在git版本不同的时候,作用不同】
    在git 1.x 的时候,git add . 只会提交有修改的文件和新增的文件,git add -A 会提交所有修改的文件(包括被删除的文件)
    在git 2.x 的时候,git add . 和git add -A 作用相同, 会提交所有修改的文件(包括被删除的文件)
    也就是说,假如你的git版本是在1.x的时候,git add . 命令不会提交已删除的文件,在git 2.x 的时候,这2个命令都是提交被修改了的文件。
    【友好提示:如果你当前git版本低于2.0,赶紧升级到2.0以上吧】
     
    2. 推送本地分支到远程服务器,使用git push 是什么效果?
    [如果你不了解下面的配置,后续直接在分支上直接使用 git push 是一个风险很高的行为。]
    git版本的不同,或者被改变了git的全局配置config文件里面的push.default属性的时候,会使git push操作的默认行为不同 
    查看自己当前git版本的配置,在命令行中输入
    vim ~/.gitconfig
    可以看到push.default属性 在git 2.0之前,这个属性的默认被设为'matching',2.0之后则被更改为了'simple'。
    push.default 有以下几个可选值: nothing, current, upstream, simple, matching 其用途分别为:
    ● nothing - push操作无效,除非显式指定远程分支,例如git push origin develop
    ● current - push当前分支到远程同名分支,如果远程同名分支不存在则自动创建同名分支。
    ● upstream - push当前分支到它的upstream分支上
    ● simple - simple和upstream是相似的,只有一点不同,simple必须保证本地分支和它的远程upstream分支同名,否则会拒绝push操作。
    ● matching - push所有本地和远程两端都存在的同名分支。
    注意 push.default = current可以在远程同名分支不存在的情况下自动创建同名分支,有些时候这也是个极其方便的模式,比如初次push你可以直接输入 git push 而不必显示指定远程分支。
     
     
    4. 同事b处理完成后也推送同步到git服务器,此时我需要拉取同步远程分支feature_abc进行发布
    git checkout feature_abc //切换到feature_abc分支下
    git pull  //同步远程分支内容
    [可能你会偶尔看到下面的提示]
    There is no tracking information for the current branch. Please specify which branch you want to merge with. See git-pull(1) for details git pull <remote> <branch> If you wish to set tracking information for this branch you can do so with: git branch --set-upstream-to=origin/<branch> new1
     
    对git来说,git pull = git fetch + git merge,如果我们没有设定当前分支关联的远程分支,它并不知道我们要合并哪个分支到当前分支,所以我们需要通过下面的代码指定当前分支的关联分支
    git branch --set-upstream 当前分支 origin/远程分支   //这里的远程分支则根据场景选填主干master或者远程特性分支
    git branch --set-upstream-to=origin/<branch> feature_abc
    5. 合并分支代码到主干
    git checkout master // 切换到主干
    git merge feature_abc --no-ff -m "pu:发布feature_abc新特性" // 合并代码到主干
    git push //推送主干最新代码到git服务器,有冲突时解决冲突再push  
     
     
    6. 删除该特性分支
    git branch   //查看本地分支
    git branch -a    //查看所有的分支,包括远程的
    git branch -d feature_abc     //删除本地的某个分支
    git branch -r -d origin/feature_abc    //删除本地的远程追踪分支【非删除远程分支】
    git push origin :feature_abc   // 【注意 :前后】,删除远程库对应feature_abc分支
    额外场景:
    1. 当你在主分支误改了代码,该如何优雅的处理呢?
    1.1 还未添加到暂存区/已添加到暂存区还未提交
    这种情况比较好办,直接git checkout -b new_branch,这样你的改动会被带到新分支。然后把主分支的修改用git checkout --给恢复就行了。
    另一种方法是先git stash,然后git checkout new_branch,再新分支git stash pop即可。这种方式最好理解,就是把改动先放到一个临时区域,让git先别管,到了正确的分支再拿出来。我经常用的就是这招。
     
    1.2 已提交到本地仓库
    这种情况就要有reset了,用git reset HEAD^撤销最近一次提交,如果有多次提交的话,查找到对应提交id进行reset就行。git默认的是mixed模式,即撤销暂存区,保留工作区。这样你再切分支也还能把改动带过去。当然加--soft也可以,这样能保留暂存区和工作区。
     
     
    1.3已push到远程仓库
    如果很不幸你已经把误修改给push了,你需要用到revert命令,先用git log查找到你误提交的commitId,然后git revert commitId,产生一次逆向提交,来对冲掉之前的。之后再push到远程就可以了。
     
     
    2.在本地修改了文件,但是要丢弃本地的这个修改
    git checkout .  //本地所有修改的。没有的提交的,都返回到原来的状态 
     
  • 相关阅读:
    Swift扩展(Extension)
    Swift构造器(Initializer)与析构器(Deinitializer)
    Swift下标
    Swift方法
    Swift属性
    Swift类与结构体
    Swift闭包(Closure)
    python调用c++/c 共享库,开发板上编译的一些坑!
    python调用c++类方法(2)
    ubuntu 18.04 gcc g++降级4.8版
  • 原文地址:https://www.cnblogs.com/beidan/p/6653371.html
Copyright © 2020-2023  润新知