Git基本操作全

  • Git基本操作全:

    • https://learngitbranching.js.org/?locale=zh_CN
  • Git sourceTree基本操作:

    • https://www.jianshu.com/p/6b5ed581b158
  • 指针HEAD、Master

    • master:本地master,
    • origin/HEAD:指向当前分支
      • HEAD 是一个对当前检出记录的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。
      • 总是指向当前分支上最近一次提交记录。
    • origin/master:远程服务端master指向提交,
  • Git查看提交记录:git reflog

    • 回滚:git reset --hard 地址
  • 建立远程仓库:x

    • git remote set-url origin http://xxx/ycf_new.git
  • git checkout C1 提交记录/dev分支

    • HEAD指向提交记录或者切换分支,通过哈希值指定提交记录
    • 分离HEAD: HEAD指向master,master指向C1,git checkout C1则HEAD指向C1
    • C1为指针地址,具体的提交记录而不是分支:则表示直接将HEAD指向C1
    • git checkout HEAD~1将HEAD指向指向上一个父级
  • Git分支创建并合并merge,推送到远程

    • git branch dev :创建分支dev

    • git checkout dev:切换到分支dev

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

    • git checkout master:切换到master

    • git merge dev :将dev合并到master。共同指向一个新的合并的父节点

    • git push origin dev:dev //将本地dev分支推送至远程dev分支,只是将创建的分支推送到远程

    • git push --set-upstream origin dev//将本地创建的分支推送到远程后,再建立链接,将修改的内容提交push上去

    • git push origin :dev //将一个空分支推送到远程即为删除 ,origin和:dev之间有空格,该命令只删除远程的分支

    • git push origin --delete dev //或者?不生效

    • git branch -d dev:删除本地分支而非远程分支,git branch -d

    • git push -u origin v1.0.0 :提交本地创建过的分支名到远程并关联了代码,注意是本地存在才能提交。不用setupstream这种方式,git push -u origin '分支名' :提交分支文件

    • git branch -a: 查看所有分支(远程和本地的,实际上没有fetch过无法获取远程的,比如git clone xx后,并没有pull或者fetch动作,那查看到的就是clone时获取的分支)

    • git branch -l : 查看本地分支

    • git fetch --all: 获取git 服务器上的所有的分支

    • git checkout -b dev origin/dev: 作用是checkout远程的dev分支,在本地起名为dev分支,并切换到本地的dev分支

  • Git合并rebase

    • git rebase master:
      • 现在dev分支,合并到master分支,不用切换到master,直接git rebase master,就从dev移动到master了,但是master还没有更新了。
      • 区别于merge,不是共同的父节点,提交记录是新的节点dev指向,原有的dev的副本,之前的master还是在之前的节点。成线性展示。
      • master没有更新:切换到git checkout master,在git rebase dev一下,此时节点一样
      • 提取一系列记录dev合并复制到另外的地方master
  • ^ ~相对引用,

    • ^:向上移动 1 个提交记录
    • ~ 向上移动多个提交记录,如 ~3
    • git checkout master^ git checkout master^^
    • 移动的HEAD,比如现在HEAD指向master,git checkout master^ 后HEAD指向master的父级
  • -f 强制修改分支位置,移动分支,git branch -f master C9,强制指向,使用哈希值

    • git branch -f master HEAD~3
      • 使用相对引用不能存在断层,即存在分支最好直接指向哈希值
      • 让分支指向另一个提交 ,将 master 分支强制指向 HEAD 的第 3 级父提交。
      • 假设此时HEAD指向是Dev分支,使用上诉命令也没有关系,强制master指向 HEAD 的第 3 级父提交。但是HEAD还是在Dev上,只是改变了master指向
      • git branch -f master C9:可直接使用hash值让master指定到该位置
      • git branch -f master HEAD~2:将master指向HEAD的上两个父级,改变的是master的指向而非HEAD
      • git checkout HEAD~2:改变的是HEAD的指向
  • git reset 、git revert 撤销变更

    • git reset HEAD~: git revert HEAD~3切换到要撤销的分支,选择HEAD等相对应用。要切到需要变更的分支上,就一个参数。也可直接git revert HEAD撤销上个提交。最好使用hash值,而不是相对应用。如果撤销的是当前分支的当前的那个提交则使用git rever HEAD方便。
    • git reset:lcoal本地分支——对本地分支中使用 git reset 很方便,但是这种“改写历史”的方法对大家一起使用的远程分支是无效
    • git revert:pushed远程分支——撤销更改并分享给别人。C0-C1-C2撤销C2后提交记录后多了个新提交C0-C1-C2-C2',C2',C2'引入了更改,这些更改刚好是用来撤销C2的提交,再push即可
  • git cherry-pick <提交号>: 整理提交记录。知道提交记录的前提下

    • git cherry-pick C2 C4:
      • 切换到要合并的分支master,需要dev分支上的提交记录写上即可,写上的提交记录在dev上自动抓过来到master
      • 将分支的提交记录复制到master上
      • 不管分支有几个,提交号在几个分支上,只需要将提交号写上都会复制过去
      • 可以将提交树上任何地方的提交记录取过来追加到 HEAD 上(只要不是 HEAD 上游的提交就没问题)
  • git rebase -i dev:将提交重新排序,交互式的 rebase:不清楚提交记录

    • 交互式 rebase 指的是使用带参数 --interactive 的 rebase 命令, 简写为 -i
    • Git 会打开一个 UI 界面并列出将要被复制到目标分支的备选提交记录,它还会显示每个提交记录的哈希值和提交说明,提交说明有助于你理解这个提交进行了哪些更
    • git rebase -i dev :则会弹框,手动排序,
  • git rebase dev master :head指向dev时,使用该命令,master则指向dev,并切换到master。两个分支指向同一个位置将master指向到dev并切换到master,本地栈式提交

    • 先git rebase -i HEAD^重新排序把想要的提交记录挪到最前端,在git commit -amend在新开的树上修改它,然后在排序
    • 复制提交记录:git rebase -i ,git cherry-pick 提交记录
    • git commit --amend 来进行一些小修改,改变提交记录,在当前的提交树上新开一个提交树复制一下到新的记录,并指向他
    • git rebase -i HEAD~2:当前的HEAD指向向上走2个提交,弹框后选择排序,则会在已走的指定的那个提交记录后复制新的提交,’,可反复操作,严格按照在对话框指定的方式排序进行复制
  • git tag V1 <提交号> :打Tag,标签在代码库中起着“锚点”的作用

    • 在提交号处打个标签V1,不指名具体的提交号则会默认为HEEAD的指向
    • git tag :查看标签
    • git tag tag_v1 创建tag,tag名为tag_v1,在本地
    • git tag -a <版本号> -m "<备注信息>":打tag添加备注:gti tag -a tag_v1 -m "tag_v1提交信息包括日志等"
    • git tag -d tag_v1:删除本地的tag标签
    • git checkout tag_v1:切换到该标签
    • git tag -a tag_v1 commitID :给指定提交commit 打标签
    • git push origin tag_v1:发布标签,推送到远程git
    • git push origin tags:将本地所有的tag推送到远程
    • git push origin :refs/tags/tag_v1:删除一个远程标签,相当于推送一个空的目标标签到远程(# git push origin refs/tags/源标签: refs/tags/目标标签)
  • Git Describe :给标签加描述

    • 输出结果:__g
      • tag 表示的是离 ref 最近的标签, numCommits 是表示这个 ref 与 tag 相差有多少个提交记录, hash 表示的是你所给定的 ref 所表示的提交记录哈希值的前几位。
    • git describe master:v1_2_gC2
    • git describe side:v2_1_gC4
  • git bisect:查找产生 Bug 的提交记录的指令

  • 多分支 rebase :git rebase将分叉的分支重新合并

    • git rebase master dev:将master合并到dev,后者改的节点合并到前者的后面生成新的节点,后者的提交号不完全包含前者的提交号,不然就是最新的无效的。rebase后HEAD指向后者dev
    • git rebase 分支1 分支2 :对于当前HEAD是哪个分支没有要求,是把后者合并到前者,且HEAD指向后者,将没有共同的提交记录合并到前者、后者包含了前者那就是最新的rebase
  • 选择父提交记录 git checkout master^

    • ^ 与 ~ 符一样,后面也可以跟一个数字
    • 操作符后面的数字与 ~ 后面的不同,并不是用来指定向上返回几代,而是指定合并提交记录的某个父提交
    • 如果不加数字修改符直接检出 master^,git checkout master^,会回到第一个父提交记录,第一个父提交记录是指合并提交记录正上方的那个提交记录
    • git checkout master^2:表示合并记录的另外一个父提交
    • git checkout master~,一条线上的走一个提交记录即上一个。
    • git checkout master^2:另外一个父提交,走一个
    • git checkout master~2:直线上的走两个
    • git checkout master^22等同于git checkout master~ + git checkout master^2 + git checkout master~2
  • git stash:存储

    • 1、git stash list:查看stash了哪些存储
    • 2、git stash save "save message" : 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。
    • 3、git stash :存储
    • 4、git stash clear :删除所有缓存的stash
    • 5、git stash apply : git stash apply stash@{1} 应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1}
    • 6、git stash drop stash@{num}存储,从列表中删除这个存储、
    • 7、git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}
    • 8、git stash show -p : 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p ,比如第二个:git stash show stash@{1} -p
    • 9、git stash pop :命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}

你可能感兴趣的:(Git基本操作全)