• git,repo


    #git版本回退到某一次提交

    git reset --hard commitId  ---代码回退到commitID对应的版本

    #撤销本次提交(回滚代码到上一次提交)
    git reset --soft HEAD^

    HEAD^ 表示上一个版本,即上一次的commit,也可以写成HEAD~1
    如果进行两次的commit,想要都撤回,可以使用HEAD~2

    --soft
    不删除工作空间的改动代码 ,撤销commit,不撤销git add file
    --hard
    删除工作空间的改动代码,撤销commit且撤销add

    git reset 版本回退命令有3种方式:
    --mixed   会保留源码,只是将git commit和index 信息回退到了某个版本.
    --soft    保留源码,只回退到commit信息到某个版本.不涉及index的回退,如果还需要提交,直接commit即可.
    --hard    源码也会回退到某个版本,commit和index 都会回退到某个版本.(注意,这种方式是改变本地代码仓库源码) 

    git reset HEAD^        #回退所有内容到上一个版本
    git reset HEAD^ a.py    #回退a.py这个文件的版本到上一个版本
    git reset –-soft HEAD~3 #向前回退到第3个版本
    git reset -–hard origin/master #将本地的状态回退到和远程的一样
    git reset 057d         #回退到某个版本,057d ~ commitId
    git revert HEAD         #回退到上一次提交的状态,按照某一次的commit完全反向的进行一次commit

    git reset --hard HEAD~X 会退到之前X版本

    git diff master..test 显示两个分支间的差异
    eg : git diff master...test ‘master’,‘test’的共有 父分支和'test'分支之间的差异
    eg: git diff --stat 统计那些文件被改动

    如果需要一行显示 git log --pretty=oneline

    git checkout -- file 丢弃工作区修改,撤销修改到最近一次

    git rm 删除本地版本库文件,再使用 git commit 提交

    git checkout -b dev 创建dev分支并切换到dev分支

    git branch dev 创建dev分支
    git checkout dev 切换到dev分支

    git checkout . ``#本地所有修改的。没有的提交的,都返回到原来的状态

    git merge 合并指定分支到当前分支
    eg: git merge dev 把dev分支合并到master分支上

    git log --graph 可以看到分支合并图,如果git无法合并,必须先解决冲突才能提交

    git checkout master 切换到master分支
    git checkout -b issue 新建分支

    git pull 从其他的版本库(既可以是远程的也可以是本地的)将代码更新到本地
    eg: git pull origin master origin版本库的代码更新到本地的master主枝

    git push :将本地commit的代码更新到远程版本库中
    eg: git push origin git push localbranch master:refs/for/master 将本地的代码更新到orgin的远程版
    本库中
    git checkout HEAD <some file> [<some file>] ,清除工作目录树中的修改

    打补丁
    将commit打包成patch
    修改代码
    $ vi drivers/bluetooth/btusb.c
    把代码添加到git管理仓库
    git add .
    提交修改
    git commit -m "some message"
    查看日志,获取到hash
    git log
    生成patch
    git format-patch -s 1bbe3c8c19
    或者--
    git format-patch HEAD^ # 最近的1次commit的patch
    测试,应用patch
    检查patch文件
    git apply --stat xxx.patch
    查看是否能应用成功
    git apply --check xxx.patch
    应用patch
    git am xxx.patch
    注:1. 之前应, git am -abort 放弃之前am信息, 有可能会遇到 .git/rebase-apply still exists but
    mbox given

    修改以及commit并且以及push的描述
    修改最近一次的commit
    git commit --amend
    修改commit历史,
    git rebase -i HEAD~X or git rebase -i (commit -id) 接着会出现
    pick:*******
    pick:*******
    pick:******* ls
    将pick改为edit就可以修改,利用`git commit --amend命令
    最后 git rebase --continue 搞定
    如果需要删除已经push的可以将pick改为drop

    通过git rebase -i 将本地的多次提交合并为一个,以简化提交历史。本地有多个提交时,如果不进行这一步,在git rebase master时会多次解决冲突(最坏情况下,每一个提交都会相应解决一个冲突)
    git rebase master 将master最新的分支同步到本地,这个过程可能需要手动解决冲突(如果进行了上一步的话,只用解决一次冲突)
    然后切换到master分支,git merge将本地的local分支内容合并到master分支
    git push将master分支的提交上传

    git checkout master
    git pull
    git checkout local
    git rebase -i HEAD~2  //合并提交 --- 2表示合并两个
    git rebase master---->解决冲突--->git rebase --continue
    git checkout master
    git merge local
    git push

    git pull --rebase没有产生新的节点,使用rebase的git演进路线(提交树)是一直向前的,这样在版本回退时也很容易; git pull 有可能会产生新分支,会是跳跃的(有分叉),且merge产生冲突处理起来比较麻烦(分支节点多)

    如果只查文件中某一部分由谁所写:

    git blame 文件名 | grep "查找词"

    或者:

    git blame 文件名 -L a,b

    -L 参数表示后面接的是行号(Line), a,b代表查询文件的第a行到第b行之间的文件内容情况。

    a, 则代表从第a行到文件结尾

    ,b则代表从文件开头到第b行。

    假如我们要查上图的第5行,命令则如下所示:

    git blame webpack.mix.js | grep "Mix Asset"

    git blame webpack.mix.js -L 5,5

    仅仅这些,我想应该已经足够帮助我们找出真凶了。

    如果你想更加强大,这里有git blame命令的详细文档:https://git-scm.com/docs/git-blame,供你慢慢啃

    -------------------------------
    1.repo forall命令
     # repo forall -help
     # repo forall -c: 此命令遍历所有的git仓库,并在每个仓库执行-c所指定的命令,被执行的命令不限于git命令,而是任何被系统支持的命令,比如:ls, git log, git status等
    2.repo forall -c使用
      # 切换分支
      # repo forall -c git checkout dev_test
      # 删除分支
      # repo forall -c git branch -D dev_test
      # 丢弃分支
      # repo forall -c git git reset —hard 提交ID(或最原始:HEAD)
      # repo forall -r framework/base/core -c git reset —hard 提交ID(或最原始HEAD)

    repo forall可以遍历每个repo仓库并执行同样的命令

    用法为:

    repo forall [<project>...] -c <command> [<arg>...]
    -c后可以直接跟任何shell命令

    eg:

    repo forall -p -c git checkout branch_name

    repo forall -h
    Usage: repo forall [<project>...] -c <command> [<arg>...]
    repo forall -r str1 [str2] ... -c <command> [<arg>...]"


    Options:
      -h, --help            show this help message and exit
      -r, --regex           Execute the command only on projects matching regex or
                            wildcard expression
      -g GROUPS, --groups=GROUPS
                            Execute the command only on projects matching the
                            specified groups
      -c, --command         Command (and arguments) to execute
      -e, --abort-on-errors
                            Abort if a command exits unsuccessfully


      Output:
        -p                  Show project headers before output
        -v, --verbose       Show command error messages
        -j JOBS, --jobs=JOBS
                            number of commands to execute simultaneously

    git reset --hard HEAD~X 会退到之前X版本
    ---------------------------------------
    git log --graph --pretty=oneline --abbrev-commit

    git checkout master
    git merge dev   # fast forward方式,合并分支dev到master,不会产生新的节点,类似指针指向dev内容,快速前进


    git checkout master
    git merge --no-ff -m "merge with no-ff" dev  -- -m将合并后的内容创建为一个新的提交点

    --no-ff 指的是强行关闭fast-forward方式

    --no-ff 指的是强行关闭fast-forward方式。--no-ff (no fast foward),使得每一次的合并都创建一个新的commit记录,即要求git merge即使在fast forward条件下也要产生一个新的merge commit,用来避免丢失信息。这对于以后代码进行分析特别有用


  • 相关阅读:
    mysql索引
    mysql主从复制(同步)
    MySQL事务与锁
    四大高阶函数
    客户端、服务端通信值统计字符串个数【网络程序设计
    《Unicast QoS Routing Algorithms for SDN Survey 2018》【毕设
    CDQ分治【待补充,数据结构
    KD树学习小结【待补充,数据结构
    线段树模板【数据结构
    【牛客网】牛客练习赛19 F 算式子【数学--递推 、前缀、数字】
  • 原文地址:https://www.cnblogs.com/bluestorm/p/15050932.html
Copyright © 2020-2023  润新知