zoukankan      html  css  js  c++  java
  • git学习

    神秘代码:https://learngitbranching.js.org/?locale=zh_CN

    流程图:

    显然,git pull就相当于git fetch 再 merge到本地分支。

    像我们平时工程用的source tree里面各按键对应的命令:

    提交:commit

    拉取:pull

    推送:push

    抓取:fetch

    后面两个还没用过,回头补

    git branch:

    git branch a  新建分支a

    git branch 查看本地所有分支

    git branch -r 查看远端所有分支

    git branch -a 查看本地/远端所有分支

    git branch -d xx  删除本地xx分支

    git branch -d -r xx  删除远端xx分支(还需要推送到服务器,git push origin: <branchname>)

    git branch -m old_branch_name new_branch_name  重命名本地分支(也需要推送到服务器才能更新远端)

    参数解释:

    -d --delete:删除 -D --delete --force的快捷键 -f --force:强制 -m --move:移动或重命名 -M --move --force的快捷键 -r --remote:远程 -a --all:所有

    当前在a分支  运行git rebase b  将a分支接到b分支后面  xxx-xxx-xxx-b-a

    改变分支指向:

    git checkout master^  或者 git checkout master~1 效果是一样的,都是把head节点置为master的父节点,~几就是向上移动几个节点。

    也可以通过git checkout 节点哈希值^/~(num)来把head节点置到相应节点位置

    git branch -f a b 强制让a分支指向提交b

    git stash可以将当前现场保存起来。比如你现在在一个工作区正在工作,在当前分支已经修改了很多文件但都还没有提交。

    使用git stash命令后工作区就变干净了(运行git status显示工作区干净),这时候可以很方便的运行checkout去跟踪其它分支/新建其它分支去完成其它工作。

    等到需要继续之前工程的时候运行git stash list可以显示所有暂存的工作。使用git stash pop就可以恢复之前stash的工作现场(会自动删除缓存的现场),用git stash apply也可以,但不会自动删除缓存现场,需要手动git stash drop删除。

    git merge x  把x分支合并到当前所在分支

    这里写图片描述

    根据这张图片可以看出

    git merge –no-ff 可以保存你之前的分支历史。能够更好的查看 merge历史,以及branch 状态。

    git merge 则不会显示 feature,只保留单条分支记录。

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

    fast-forward方式就是当条件允许的时候,git直接把HEAD指针指向合并分支的头,完成合并。属于“快进方式”,不过这种情况如果删除分支,则会丢失分支信息。因为在这个过程中没有创建commit

    git merge --squash 是用来把一些不必要commit进行压缩,比如说,你的feature在开发的时候写的commit很乱,那么我们合并的时候不希望把这些历史commit带过来,于是使用--squash进行合并,此时文件已经同合并后一样了,但不移动HEAD,不提交。需要进行一次额外的commit来“总结”一下,然后完成最终的合并

    总结:
    --no-ff:不使用fast-forward方式合并,保留分支的commit历史
    --squash:使用squash方式合并,把多次分支commit历史压缩为一次

    左:(u are on blue branch) git merge yellow branch --no-f

    中:(u are on blue branch) git merge yellow branch --squash

                  git commit -m "new a brown commit!"

    右:(u are on blue branch) git merge yellow branch(如果符合fast-forward条件就会执行,这样就会导致图右的情况,黄色分支历史没了)

    squash英文释义就是挤压的意思,非常形象(将另一个分支挤到当前分支上!)

    查看日志:git log

    图形化查看日志:

    git log --graph --decorate --all 

    -------图形化--装饰(没发现装饰啥了)------所有分支(否则只展示当前分支)

     

    git reset  HEAD^1/master~1/master~19999 回退HEAD指针到指定位置

    git revert 也是回退,但它是利用一个新的commit来回退,比如:现在的master分支:f1-f2-f3-f4-f5,head指向f5,但是我现在发现f4我写错了,但f5我还想要,使用:git revert f4 这样分支会变成这样:f1-f2-f3-f4-f5-f6,其中f6包含了f5,但对f4中的操作都做了一次逆操作。revert理解为“反做”比较合理。

    revert多了一个commit,也并没有丢失该丢的数据,这样就可以push给远端共享给他人了。

    reset是无法共享给别人的,因为是往前回滚,会丢失一些不必丢失的commit。

     

    一般情况如果合并分支我们会使用merge, 但如果我们不需要另一个分支的全部提交,可以使用下面的命令:

    git cherry-pick x y z 可以单独把自己想要的几个提交加入当前分支,

    比如现在位于master,git log:a--b--c--d,head指向d。

    然后运行git cherry-pick x y z,master变成这样:a--b--c--d--x--y--z,head指向z。也就是把指定的几个commit(如果指定的是分支名,就代表该分支的最新一个commit)依次作为当前分支的节点进行commit。

     

    未完待续。。

     

  • 相关阅读:
    记一次内衣渗透
    mysql提权
    Token窃取与利用
    组策略首选项提权
    Windows错误配置提权
    windows内核溢出漏洞提权限
    xss漏洞
    mysql语句大全
    二叉树
    10个对所有学科都有用的Python数据可视化库
  • 原文地址:https://www.cnblogs.com/FdWzy/p/13470941.html
Copyright © 2011-2022 走看看