首页 > 其他分享 >2018_10_22_02

2018_10_22_02

时间:2024-10-08 20:23:03浏览次数:8  
标签:02 10 HEAD git pull -- reset 2018 commit

git~F.A.Q

在git的一般使用中,如果发现错误的将不想提交的文件add进入index之后,想回退取消,则可以使用命令:git reset HEAD <file>...,同时git add完毕之后,git也会做相应的提示,比如:
引用

# Changes to be committed:
# (use "git reset HEAD<file>..." to unstage)
#
# new file: Test.scala

git reset [--hard|soft|mixed|merge|keep] [<commit>或HEAD]:将当前的分支重设(reset)到指定的<commit>或者HEAD(默认,如果不显示指定commit,默认是HEAD,即最新的一次提交),并且根据[mode]有可能更新index和working directory。
下面列出一些git reset的典型的应用场景:
A) 回滚add操纵

引用

# 编辑文件frotz.c, filfre.c,做了些更改,并把更改添加到了index
edit
git add frotz.c filfre.c
# 查看邮件,发现某人要你pull,有一些改变需要你merge下来
mailx
# 然而,你已经把index搞乱了,因为index同HEAD commit不匹配了,
# 但是你知道,即将pull的东西不会影响已经修改的frotz.c和filfre.c,
# 因此你可以revert这两个文件的改变。revert后,
# 那些改变应该依旧在working directory中,因此执行git reset。
git reset
# 然后,执行了pull之后,自动merge,
# frotz.c和filfre.c这些改变依然在working directory中。
$ git pull git://info.example.com/ nitfol (4)

B) 回滚最近一次commit

引用

git commit ...
# 当提交了之后,你又发现代码没有提交完整,
# 或者你想重新编辑一下提交的comment,
# 执行git reset --soft HEAD^,
# 让working tree还跟reset之前一样,不作任何改变。
# HEAD^指向HEAD之前最近的一次commit。
git reset --soft HEAD^
# 对working tree下的文件做修改
edit
# 然后使用reset之前那次commit的注释、作者、日期等信息重新提交。
# 注意,当执行git reset命令时,git会把老的HEAD拷贝到文件.git/ORIG_HEAD中,
# 在命令中可以使用ORIG_HEAD引用这个commit。
# commit 命令中 -a 参数的意思是告诉git,
# 自动把所有修改的和删除的文件都放进stage area,未被git跟踪的新建的文件不受影响。
# commit命令中-c <commit> 或者 -C <commit>意思是拿
# 已经提交的commit对象中的信息(作者,提交者,注释,时间戳等)提交,
# 那么这条commit命令的意思就非常清晰了,把所有更改的文件加入stage area,
# 并使用上次的提交信息重新提交。
git commit -a -c ORIG_HEAD

C) 回滚最近几次commit,并把这几次commit放到叫做topic的branch上去。

引用

# 你已经提交了一些commit,但是此时发现这些commit还不够成熟,
# 不能进入master分支,但你希望在新的branch上润色这些commit改动。
# 因此执行了git branch命令在当前的HEAD上建立了新的叫做 topic/wip的分支。
git branch topic/wip
# 然后回滚master branch上的最近三次提交。
# HEAD~3指向当前HEAD-3个commit的commit,
# git reset --hard HEAD~3即删除最近的三个commit
#(删除HEAD, HEAD^, HEAD~2),将HEAD指向HEAD~3。
git reset --hard HEAD~3
# 切换到`topic/wip` 分支
$ git checkout topic/wip

D) 永久删除最后几个commit

git commit ...
# 最后三个commit(即HEAD, HEAD^和HEAD~2)提交有问题,你想永久删除这三个commit。
git reset --hard HEAD~3 (1)

E) 回滚merge和pull操作

引用

# 从origin拉下来一些更新,但是产生了很多冲突,
# 你暂时没有这么多时间去解决这些冲突,因此你决定稍候有空的时候再重新pull。
$ git pull
Auto-merging nitfol
CONFLICT (content): Merge conflict innitfol
Automatic merge failed; fix conflicts andthen commit the result.
# 由于pull操作产生了冲突,因此所有pull下来的改变尚未提交,
# 仍然再stage area中,
# 这种情况下git reset --hard与 git reset --hard HEAD意思相同,
# 即都是清除index和working tree中被搞乱的东西。
$ git reset --hard
# 将topic/branch合并到当前的branch,这次没有产生冲突,并且合并后的更改自动提交。
$ git pull . topic/branch
Updating from 41223... to 13134...
Fast-forward
# 但是此时你又发现将topic/branch合并过来为时尚早,
# 因此决定退滚merge,执行git reset --hard ORIG_HEAD回滚刚才的pull/merge操作。
# 说明:前面讲过,执行git reset时,
# git会把reset之前的HEAD放入.git/ORIG_HEAD文件中,
# 命令行中使用ORIG_HEAD引用这个commit。
# 同样的,执行pull和merge操作时,
# git都会把执行操作前的HEAD放入ORIG_HEAD中,以防回滚操作。
$ git reset --hard ORIG_HEAD

F) 在被污染的working tree中回滚merge或者pull

引用

# 即便你已经在本地更改了一些你的working tree,
# 你也可安全的git pull,
# 前提是你知道将要pull的内容不会覆盖你的working tree中的内容。
$ git pull
Auto-merging nitfol
Merge made by recursive.
nitfol | 20 +++++----
...
# git pull完后,你发现这次pull下来的修改不满意,
# 想要回滚到pull之前的状态,从前面的介绍知道,
# 我们可以执行git reset --hard ORIG_HEAD,
# 但是这个命令有个副作用就是清空你的working tree,
# 即丢弃你的本地未add的那些改变。为了避免丢弃working tree中的内容,
# 可以使用git reset --merge ORIG_HEAD,
# 注意其中的--hard 换成了--merge,
# 这样就可以避免在回滚时清除working tree。
$ git reset --merge ORIG_HEAD (2)

G) 被中断的工作流程

在实际开发中经常出现这样的情形:你正在开发一个大的feature,此时来了一个紧急的bug需要修复,但是目前在working tree中的内容还没有成型,还不足以commit,但是你又必须切换的另外的branch去fix bug。请看下面的例子

$ git checkout feature ;# you were workingin "feature" branch and
$ work work work ;#got interrupted
# 这次属于临时提交,因此随便添加一个临时注释即可。
$ git commit -a -m "snapshot WIP"
$ git checkout master
$ fix fix fix
$ git commit ;# commit with real log
$ git checkout feature
# 这次reset删除了WIP commit,并且把working tree设置成提交WIP快照之前的状态。
$ git reset --soft HEAD^ ;# go back to WIPstate
# 此时,在index中依然遗留着“snapshot WIP”提交时所做的uncommit changes,
# git reset将会清理index成为尚未提交"snapshot WIP"时的状态便于接下来继续工作。
$ git reset

(H) Reset单独的一个文件

假设你已经添加了一个文件进入index,但是而后又不打算把这个文件提交,此时可以使用git reset把这个文件从index中去除。

# 把文件frotz.c从index中去除,
$ git reset -- frotz.c
# 把index中的文件提交
$ git commit -m "Commit files inindex"
# 再次把frotz.c加入index
$ git add frotz.c

(I) 保留working tree并丢弃一些之前的commit

假设你正在编辑一些文件,并且已经提交,接着继续工作,但是现在你发现当前在working tree中的内容应该属于另一个branch,与这之前的commit没有什么关系。此时,你可以开启一个新的branch,并且保留着working tree中的内容。

git tag start
git checkout -b branch1
edit
# 这次是把在branch1中的改变提交了。
git commit ...
edit
# 此时发现,之前的提交不属于这个branch,此时你新建了branch2,并切换到了branch2上。
git checkout -b branch2
# 此时你可以用reset --keep把在start之后的commit清除掉,但是保持working tree不变。
git reset --keep start

标签:02,10,HEAD,git,pull,--,reset,2018,commit
From: https://www.cnblogs.com/honghaitao/p/18452429

相关文章

  • 2024年Java最新面试题总结(五年经验)
    第一章、基础技术栈1.1)集合,string等基础问题1、arraylist,linkedlist的区别,为啥集合有的快有的慢①ArrayList它的底层是数组,有下标的概念,可以通过index下标直接定位元素,所以查询快;在增删时,会进行扩容判断和拷贝,所以增删慢。②LinkedList的底层是双向链表。每次查询都要循环......
  • 10.8 模拟赛(2023 CSP-S 十连测 #5)
    炼石计划10月28日CSP-S十连测#5【补题】-比赛-梦熊联盟(mna.wang)复盘T1秒了。30min。T2题目越短越难。但是链的是经典题目,写了。小样例太水,大样例太大,不方便猜结论。于是先写暴力然后自己造样例。模拟了五六组感觉可以按照lca的深度降序排序,然后能选就选。这......
  • 10月8日初看《程序员修炼之道:从小工到专家》结构
    自从学习了代码编程,现在养成了一个做事先分析结构的习惯,看到这本书,从目录看起,每个章节翻阅一下具体来说,书中内容可以大致分为以下几个部分:1注重实效的哲学:探讨了程序员应有的工作态度和思维方式,如如何面对软件的复杂性、如何保持代码的整洁和可维护性等。2注重实效的途径:介绍了......
  • 2023 ICPC 南京
    10.5想要袋鼠。赛时5题深刻感觉到代码能力瓶颈。I签到C也是签到,需要枚举的次数很少。F似乎是签到但是队友debug卡了一百年,晚点补一下看看Gxixike秒的L思路就是贪心。我写了两遍错的,xixike重构了一下把能合并的都合并了就过了。A比较显然的是连通块里面的袋鼠都胜......
  • 2022 CCPC 绵阳AE
    2022CCPC绵阳A.BanorPick,What’stheTrick?题面描述:红蓝双方有一个大小为nnn的英雄池,每次操作一方可以选择一个英雄或者......
  • 2021 ICPC 南京
    10.7赛时四题,也是可能是赛前最后一场vp,国庆爽vp了4场但是似乎毫无长进。这场其实7题思路都有开出来,但是由于我睡着了没能阻止队友连开两小时J所以浪费太多时间。。感觉D和I都比J简单(大概24级军爷都要开始军训了,然后我在机房军训,大家都有光明的未来。A签到M选取一个最大值一......
  • XYD1005CSPS
    T1传送门[最短路,二分答案]Description无向连通图,求出一个最小的\(x\),使得每两点之间存在一条路径可以划分成不超过\(k\)段路径,且每段路径长度不超过\(x\),只能从节点处切割,不能从边中间划分。\(n\le100\),无重边自环。Solution\(n\)非常小,又要考虑每两个点,自然想到全......
  • MT1301-MT1310 码题集 (c 语言详解)
    MT1301·1的补码c语言代码实现#include<stdio.h>intmain(){longn=0;longb=0;scanf("%ld",&n);inti=0;//while(b<n){b=b*16+0xf;}printf("%ld",b-n);return......
  • Deformable DETR改进|爆改模型|涨点|在骨干网络和可变形编码器间加入YOLOv10的PSA和SC
    一、文本介绍本文修改的模型是Deformable-DETR,在骨干网络和可变形编码器之间加入YOLOv10的PSA和SCDown模块。其中PSA是YOLOv10提出的一种高效的自注意力模块,为了避免注意力带来的巨额开销,本文将PSA应用于可变形编码器输入的最高层级特征图。SCConv是一种空间和通道解耦的卷积......
  • NSSCTF(PWN)10
    [HUBUCTF2022新生赛]singout这题是道签到题,直接nc但是catflag得不到flag我们可以用:1catflag2nl${IFS}f*3tacfla*>&24tacf\lag>&25tail./*6tac${IFS}f*7tac$IFS$9f*8tac./*用这些得到flag[LitCTF2023]狠狠的溢出涅~查看发现是64位文件这道......