zoukankan      html  css  js  c++  java
  • git 使用方法 (reset merge rebase stash diff等)

    基本功能:
    git clone:克隆仓库
    git pull:从远程仓库拉取代码到本地
     
    git stash:将修改后的代码存储到本地(一个栈结构)
    git stash pop:将你stash到本地的代码与重新git pull下的代码合并
     
    git add XXX:将XXX文件加入到暂存区
    git commit -m "注释":将暂存区的文件提交到本地仓库
    git push:将本地仓库的内容推送到远程仓库
     
    git checkout:切换分支或恢复工作树文件
     
    -d:删除
    -D:强制删除
    删除本地分支:
    git branch -D 分支名
    删除远程分支:
    git push origin --delete 分支名
     
    获取新分支的代码
    git checkout -b dev_etf_m3(本地名称) origin/dev_etf_m3(远程名称)
     
     
    将diff.txt导入
    git apply --reject diff.txt
     

    log相关

    查看当前分支图形化的commit历史(oneline 一条提交信息用一行展示)

    git log --oneline --graph

    显示当前分支的创建来源分支

    git reflog show branchname

    git diff 相关

    只列出文件名不列出详细信息:

    git diff --name-only

    只列出文件名和增加、删除、修改等:

    git diff --name-status

    git diff 排除指定目录,如排除toolchain

    git diff ':!toolchain'

     

    获取commit ID

    git rev-parse HEAD # 获取完整的commit id

     git rev-parse --short HEAD # 获取短commit id

    本地分支 push 到远程并追踪

    git push --set-upstream origin branch_name

     
    本地分支追踪远程分支
    git branch --set-upstream dev_etf_m3(本地名称) origin/dev_etf_m3(远程名称)
    git branch --set-upstream-to=origin/dev_etf_m3(远程名称) dev_etf_m3(本地名称)
     
    git 标签tag 
    git tag tagname           添加标签名为tagname的标签
    git tag -a tagname -m "commit"       添加标签并加注释
    git checkout tagname               切换到tagname标签
    git tag -d tagname                        删除标签
    git push origin tagname                    提交标签到仓库
     
    git中名词含义
    HEAD:大多数时候HEAD指向分支中最新提交。
    master:git在首次创建repo时创建的默认分支的名称。在大多数情况下,“主”意味着“主要分支”。
    origin:git为主远程仓库提供的默认名称。
     
    例子:git reset --soft HEAD^
    HEAD^的意思是上一个版本,也可以写成HEAD~1;
    如果进行两次commit都想撤回,使用HEAD~2;
     
     
    本地分支推送到远程
    git checkout -b feature-branch //创建并切换到分支feature-branch  
    git push origin feature-branch:feature-branch //推送本地的feature-branch(冒号前面的)分支到远程origin的feature-branch(冒号后面的)分支(没有会自动创建)
     
     
    rebase使用具体流程(作用是解决分叉)
    git clone master branch
    git checkout -b local
    (在本地分支上开发和测试)
    git checkout master
    git pull
    git checkout local
    git rebase -i HEAD~2 //合并提交 2表示合并两个
    git rebase master  ----->解决冲突 ----->git rebase --contine
    git checkout master
    git merge local
    git push
     
     
    merge合并代码流程:
    1、切换到merge的分支
    git checkout dev_ht_etf
    2、把代码拉下来
    git pull
    3、切换回原来的分支
    git checkout dev_ht_etf_niemao
    4、将原分支有的改动,则提交
    git status
    5、将要merge的分支merge过来
    git merge dev_ht_etf
    6、有冲突的需要解决冲突
    git status
    vi ETFRiskCtrl/PosHandler.hpp
    7、将解决了冲突的文件再次提交一下
    git status
    git add ETFRiskCtrl/PosHandler.hpp
    git commit -m "merge codes from dev_ht_etf -> dev_ht_etf_niemao"
    8、push
     
     
    stash使用方法:
     git stash:将修改存储到stash中(本地)
     git stash list:查看所有的stash
     git stash pop:弹出最新的那个stash
     git stash apply stash@{x}
     git stash drop stash@{x}
     git stash clear
     
     
     
     reset的使用方法
    reset:commit之后想撤销commit
    --mixed:不删除工作空间代码,撤销commit,并且撤销git add。为默认参数, git reset --mixed HEAD^ 和 git reset HEAD^是一样的。
    --soft:不删除工作空间代码, 撤销commit,不撤销git add。
    --hard:删除工作空间代码,撤销commit,撤销git add。操作完成后,就恢复上一次commit的状态。
    如果只是修改commit注释:git commit --amend
     
     
    对比两个分支的差异的方法
    1、显示出branch1 branch2中差异部分
    git diff branch1 branch2 --stat
    2、显示指定文件的详细差异
    git diff branch1 branch2 具体文件路径
    3、显示出所有有差异的文件的详细差异
    git diff branch1 branch2
    4、查看branch1 分支有,而branch2中没有的log
    git log branch1 ^branch2
    5、查看branch2中比branch1中多提交了哪些内容
    git log branch1..branch2
    6、不知到谁提交的多,谁提交的少,单纯想知道有什么不一样
    git log branch1...branch2
    7、在上述情况下,在显示出每个提交是在哪个分支上
    git log --left-right branch1...branch2
    注意:commit后面的箭头,根据我们在--left-right branch1...branch2的顺序,左箭头<表示是branch1,右箭头>表示是branch2的。
     
     

    本地撤销commit

    1、git reset --soft|--mixed | --hard <commit_id>
    2、git push develop develop --force (本地和远程分支都是develop)
     
    远程仓库合并commit

    1、git log

    找到和合并commit的分支

    2、git rebase -i <commit_id>

    执行rebase后,会弹出窗口

    pick 3ca6ec3   '注释**********'
     
    pick 1b40566   '注释*********'
     
    pick 53f244a   '注释**********'

    将除了第一个的pick,其他都改为 s 或 squash

    pick 3ca6ec3   '注释**********'
     
    s 1b40566   '注释*********'
     
    s 53f244a   '注释**********'

    修改后保存退出,这时 git log 一下,发现提交已经合并

    3、 git push -f 

    到这里以后,  git status  后会看到,提示让你git pull一下,千万不要这样做!否则你会发现这三条白合并了,还平白多了两条commit

    这时候,需要强制push上去  git push -f , 当然要确保强制push不会覆盖了别人的代码,如果这个分支只有你维护那就可以为所欲为了

    到此,合并多个远程分支成功~

    资料:

    https://www.jianshu.com/p/f7ed3dd0d2d8

    https://www.cnblogs.com/qianqiannian/p/6008140.html

    https://www.cnblogs.com/cristiano-duan/p/12682038.html

    https://blog.csdn.net/default7/article/details/100515595

    撤销本地commit:https://www.cnblogs.com/wuyun-blog/p/10026363.html

    合并远程仓库commit:https://blog.csdn.net/qq_21744873/article/details/82629343 

    https://www.cnblogs.com/xiaojianliu/p/12618921.html

  • 相关阅读:
    ZK节点介绍和基本操作
    zooker集群容器搭建
    Redisson 整合Spring测试分布式锁
    Redis主从哨兵容器配置
    Redis分布式锁
    Redis调用Lua脚本并测试
    基于Docker的Mysql 主从架构搭建
    容器安装及使用基础
    ConcurrentHashMap源码解读
    原码反码补码
  • 原文地址:https://www.cnblogs.com/xiaohaigegede/p/13597528.html
Copyright © 2011-2022 走看看