• Git 命令 stash cherry-pick reset rebase


    Git 命令 stash cherry-pick reset rebase

    I.

    前提:git reflog命令

    git stash show(show the file changed)

    git stash list(show the stash stack)

    stash的应用场景:本地分支正在开发,改了一些文件但是还未提交,leader要让你快点去查看线上代码的另外一个问题,要么保存一份,pull最新代码,后面再复制回来,但是操作比较啰嗦;这个时候就可以用stash。执行后,本地文件看到的都是最近一次提交后的样子,不包括stash的提交。stash要注意的是出栈顺序,解决冲突以及清理栈。

    1.vi README.md,增加一行

    2.git stash

    3. git stash show

    4. 重复vi README.md和git stash;

    5. git stash pop && git commit -a -m "pop1 commit"(两次stash的话第一次pop后要重新pop)

    6. git stash pop

    其他

    1.指定栈名

    git stash save "work in progress for foo feature" 当你多次使用"git stash"命令后,你的栈里将充满了未提交的代码,这时候你会对将哪个版本应用回来有些困惑。建议使用

    git stash save "xxx log message"(建议从一开始就这么做)

    2.stash默认是先进后出的栈,要指定出栈的记录:

    你只需要将找到对应的版本号,例如使用"git stash apply stash@{1}"就可以将你指定版本号为stash@{1}的工作取出来,

    如果你不需要stash了,用git stash clear就可以了

    3. 分支的问题

    如果git checkout branch1,在不同分支下,分别进行了stash和stash pop,那么它们会造成分支的冲突。个人实践的结果,要自己解决冲突,最后只stash pop本分支的。

    II.

    git cherry-pick 使用场景:两个大的开发分支A,B,B要合并到A。类比svn中的分支合并。cherry-pick是代码的合并。

    用法

    前提

    如果我们有 2 个分支:master, dev,现在想查看这两个 branch 的区别,有以下几种方式:

    查看 dev 有,而 master 中没有的: git log dev ^master

    同理查看 master 中有,而 dev 中没有的内容:

    git log master ^dev

    1. git cherry-pick <commit-id>

    2. 多个提交copy:git cherry-pick <first-commit>-<last-commit>

    master 分支:

    到branch1分支

    git checkout branch1 && git cherry-pick 8f5f..9e3838,左开右闭区间

    III.

    git reset使用场景:

    前提:需要知道暂存区,工作区和本地仓库

        

    有三个操作,git reset –hard是危险操作,会把指定commit后面的改动和未提交改动都删除;git reset(即mixed)会保留未提交改动,并把reset 的commit合并成红色的结果;git reset --soft 会把History转为stage,并且保留work directory的改动。

        git reset –hard xxxid && git status

        结果是工作区目录是指定xxxid的内容,提交commit历史被删除

        git reset –soft && git status

    git reset(--mixed) xxxid && git status

    IV.

        git revert使用场景:

        跟git reset相似,revert -- git revert 也是撤销命令,区别在于reset是指向原地或者向前移动指针,git revert是创建一个commit来覆盖当前的commit,指针向后移动。一般在代码出现问题要回滚,而且可以接受历史中记录回滚错误,不打算修改历史的时候做的。

    V.

        git rebase使用场景:多人开发,而且本地有拉新分支的时候(一般都要)。跟merge相似但是场景不一样。

        注意:不要在公共分支使用rebase。否则其他人pull的时候会得到被污染的主分支历史记录。

    本地和远端对应同一条分支,优先使用rebase,而不是merge。

    git rebase -i dev 可以将dev分支合并到当前分支

    其他:

    squash

    References:

    git stash的详细讲解 https://www.jianshu.com/p/14afc9916dcb

    git rebase 还是 merge的使用场景最通俗的解释 https://www.jianshu.com/p/4079284dd970

    git reset --hard --soft 与 git revert 的作用https://www.jianshu.com/p/952d83fc5bc8

  • 相关阅读:
    『Nltk』常用方法
    『Kaggle』分类任务_决策树&集成模型&DataFrame向量化操作
    『Pandas』数据读取&DataFrame切片
    『TensotFlow』RNN中文文本_下_暨研究生开学感想
    『Scrapy』爬取斗鱼主播头像
    『Scrapy』爬取腾讯招聘网站
    『TensorFlow』梯度优化相关
    『Scrapy』终端调用&选择器方法
    『Scrapy』全流程爬虫demo
    使用VS2013、TFS2013和Git进行分布式团队协作
  • 原文地址:https://www.cnblogs.com/wangzming/p/11353292.html
Copyright © 2020-2023  润新知