zoukankan      html  css  js  c++  java
  • 内部git常用总结

    上库git常用命令总结  

    摘要:介绍一下高效率上库的方法,省去合代码的流程。 推荐在linux服务器上完成代码的clone,切分支,编写,编译,提交,push的全部流程。 1、clone:git clone git@rnd-isourceb.huawei.com:TACS/td_utfp.git test (test为文件夹名) 2、设置库: git remote -v 查看当前库 添加远程本地库:git remote add origin git@rnd-isourceb.huawei.com:w00424187/utfp.git 添加远程主干库:git remote add upstream git@rnd-isourceb.huawei.com:TACS/td_u

    介绍一下高效率上库的方法,省去合代码的流程。

    推荐在linux服务器上完成代码的clone,切分支,编写,编译,提交,push的全部流程。

    在linux服务器上生成key:

    ssh-keygen

    然后将自己对应用户路径下的.ssh文件夹中id_rsa.pub文件内容复制,并在isource上配置ssh key。

    参考文档:http://3ms.huawei.com/km/blogs/details/2330371

    http://3ms.huawei.com/km/blogs/details/5230201

    先将以下基础看完,最后再看上库最简单的三部曲

    1、clone:git clone git@rnd-isourceb.huawei.com:TACS/td_utfp.git test

    (test为文件夹名)

    2、设置库:

    git remote -v 查看当前库

    添加远程本地库:git remote add origin git@rnd-isourceb.huawei.com:w00424187/utfp.git

    添加远程主干库:git remote add upstream git@rnd-isourceb.huawei.com:TACS/td_utfp.git

    origin 和 upstream看个人习惯相反设置

    如果地址或者名称取错了,不能修改,只能先移除再重新添加

    git remote remove origin

    3、更新库上库到本地

    git fetch upstream

    git fetch origin

    或者 git remote update

    ps:用小乌龟Pull操作等于:git fetch upstream + git merge

    ps:为了避免冲突,所以最好采用先fetch,再切分支方式,不要直接pull拉取

    4、基于库上最新代码develop分支切分支

     ps:此处强烈建议每次fetch库上最新的代码,然后基于最新的远端分支创建一个分支来进行特性开发

    git checkout -b test upstream/develop 

    (test为本地分支取名)

    本地切分支:git checkout test1

    查看当前分支:git branch

    删除分支:git branch -D test1

    5、在当前分支修改代码

    查看当前文件变更情况:git status

    放弃变更文件所有更改:git checkout .

     (将.换成某个文件的全路径,表示放弃该文件的修改)

    ps:git checkout 只会放弃没有add commit的文件的修改(也就是git status中红色部分的文件)

    删除未追踪(untracked)文件:

    git clean -f 删除文件

    git clean -n 显示要删除的文件和目录

    git clean -df 删除文件和目录

     批量删除分支:

    git branch |grep 'branchName' |xargs git branch -D

    将更改添加到缓存:git add .

    (将.换成某个文件的全路径,表示添加某一指定文件)

    6、add后提交

    提交:git commit

    此时进入提交界面

    输入  i  : 进入插入模式,将commit信息补全后

    输入 esc  : 退出插入模式

    输入   shift +  ;   :再输入 wq 保存并退出

     

    7、提交后查看提交情况:git log 可以查到所有的commit id

     

    8、若提交后又有些更改,更改后继续add

    提交时输入 git commit --amend

    表示将当前更改合入上一次commit,此时虽两次提交,但只会有一个commit号

    也可以理解成修改上一次commit,可以修改commit信息

     

    9、若提交后发现多提交了一个文件

    git log:查找所有commit号,找到上次你提交的commit的号的上一个commit号(通常为别人提交的)

    git reset commit_id(上一步找到的commit号)

    表示回到那个commit点,你修改的代码不会丢,会回到add前的状态

    此时用git checkout 或者rm将不想要的删了 ,或者在add时不要全部添加,重新添加想要提交的文件

    然后重新git commit提交(注意不是git commit --amend,因为你的提交已经被reset了)

    10、上传到远端库

    git push origin test:test --force

    (git push origin(远端本地库) test(本地分支名):test(远端分支名,没有会自动创建) --force)

    现在就可以提pr了

    11、如果想向publish和develop各提一个pr,这样避免合代码:

    步骤1,按以上操作先向develop提一个pr

    步骤2,基于远端库的publish切一个本地分支:

    git checkout -b test_pub upstream/br_utsv1r5_publish

    步骤3,找到修改的向远端库develop推的commit号(两种方式,一种是pr了、链接有,直接复制,一种是切到提develop的分支,然后git log)

    git cherry-pick commit_id

    这句话就完成了合入代码并以相同commit信息提交的流程

    步骤4,push到远端库上重新提pr即可

     ps:cherry-pick 相当于把之前的commit id提交到最新的那个分支上面了,还可以继续用amend ——强大

     

    12、解决冲突

    git cherry-pick commit_id

    这句有时候会失败,原因是遇到了冲突

    步骤1,输入:git mergetool

    步骤2,输入:shift + ;

    此时进入了查看冲突文件的修改的界面,但是这个界面很花不好看,我通常不习惯在这里解决冲突

    步骤3 ,输入:wqa

    不做任何更改就退出

    步骤4,此时会提示是否已解决冲突,选择已解决

    ps:其实并未真的解决,文件里还有些head <<<<之类的冲突符号,用本地打开冲突文件,然后将你想保留的真实更改在本地重新编辑保存即可

    步骤5,git cherry-pick --continue

    不输这句继续是无法做别的操作的

    冲突成功解决

     

    小窍门

    1、只要将每次提交push到远端本地库上,commit号就一定会保留,换一个库也能将更改cherry-pick过来

    2、每次开发新特性不必重新clone代码,先fetch再切分支,就是库上最新代码了

    3、不要用pull,pull意味着把库上所有的commit(包括别人的)全部cherry-pick过来,

    每次只需要切一个最新分支代码,将你的commit部分cherry-pick过来就可以了,免得冲突太多太难解决。

    这种方式可以始终基于最新的分支验自己的本地代码

    4、git show commit_id  可以看到这个commit所更改的所有内容

    5、服务器上推代码真的非常快,一是不用合代码,用git status可以看到所有变更,一目了然,二是push的速度真的很快

     

    上库三部曲:

    1.git status查看变更

       git add 添加需要的更改

    2.git commit (不是第一次提交就git commit --amend)

    3.git push

     ps:git commit --amend 太好用了,特别是对一个分支的反复修改,可以使用同一个commit id。

    有写的不对的地方,或者更好的提高效率的办法,请大家指正,多交流,谢谢

    关于Binary file forbidden解决方案:

    如果是合入个人仓(如上图的z00383539仓),可以取消或修改个人仓的二进制门禁,修改方法如下:

    点击左上角的按钮 --> Git Hooks/Web Hooks ,配置 Binary file gate页信息,在Allowed files中新增待提交的二进制文件类型,并在Privileged users中新增自己的工号信息。或者直接把Enable binary file gate前的勾去掉关掉二进制门禁。(找不到这个选项,是因为没点击edit按钮)

    git stash
    保存当前工作进度,会把暂存区和工作区的改动保存起来。执行完这个命令后,在运行git status命令,就会发现当前是一个干净的工作区,没有任何改动。使用git stash save 'message...'可以添加一些注释

     https://www.cnblogs.com/tocy/p/git-stash-reference.html

    git stash list
    显示保存进度的列表。也就意味着,git stash命令可以多次执行。

    git stash save 'build files'
    #恢复但不删除stash拷贝
    git stash apply
    git stash pop
    #删除stash分支
    git stash drop stash@{0}
    git stash clear

  • 相关阅读:
    web.py的input获取问题
    python unicode和 utf8字符串比较
    python default encoding
    linux flash player的问题
    centos 支持 ntfs格式
    学习jqueryjquery中的show()和hide()
    字符串等长分割
    类加载器分类
    类加载器子系统
    70道HR的面试题
  • 原文地址:https://www.cnblogs.com/lixuwu/p/9525975.html
Copyright © 2011-2022 走看看