在使用 git 时的一些尴尬场景里的修复方案 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
Livid
179.39D
595.35D
V2EX    git

在使用 git 时的一些尴尬场景里的修复方案

  •  5
     
  •   Livid
    PRO
    2022-06-25 21:24:59 +08:00 8384 次点击
    这是一个创建于 1254 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://ohshitgit.com

    还有一个简体中文的翻译版本:

    https://ohshitgit.com/zh
    35 条回复    2022-07-09 02:10:06 +08:00
    hsfzxjy
        1
    hsfzxjy  
       2022-06-25 21:36:18 +08:00 via Android
    最后一个太真实了,当年不怎么会 git 时就这样
    vision1900
        2
    vision1900  
       2022-06-25 22:01:36 +08:00
    The best code is not code at all.

    The best loading is no loading at all.

    The best VCS is?
    lzgshsj
        3
    lzgshsj  
       2022-06-25 23:15:02 +08:00
    哈哈,那个全删了然后重新 clone 的人就是当年的我了
    lifanxi
        4
    lifanxi  
       2022-06-25 23:27:01 +08:00
    场景还不够丰富,都是偏简单的。如果有复杂的场景,可以参考: http://sethrobertson.github.io/GitFixUm/fixup.html
    ClericPy
        5
    ClericPy  
       2022-06-25 23:33:32 +08:00
    几乎全是日常禁止使用的... 够骚, 不愧是站长
    SansXie
        6
    SansXie  
       2022-06-25 23:53:25 +08:00
    重新克隆的好像可以直接用 git clean -fdx?
    @lzgshsj
    christin
        7
    christin  
       2022-06-26 00:10:48 +08:00 via iPhone   1
    LeeReamond
        8
    LeeReamond  
       2022-06-26 01:35:41 +08:00
    很多 git 使用上的问题不如说本来就是 git 设计上的缺陷吧,就像 reset hard 名字这么叫,但功能上并不是真正的 reset 。另外虽然命令行很好,但在桌面时代 GUI 支持也不佳,到现在还是那个 win2003 年画风的界面
    msg7086
        9
    msg7086  
       2022-06-26 03:31:57 +08:00
    @LeeReamond 简而言之就是 git 的 cli api 设计得谢特一样,一个命令对应一堆功能,仅仅参数变化就会造成不同的行为(比如臭名昭著的 checkout )。不止一个人骂过了,但是 cli api 被依赖太多又不可能推倒重来……
    LeeReamond
        10
    LeeReamond  
       2022-06-26 07:31:29 +08:00
    @msg7086 你一总结感觉确实是这样。印象里 git 不是 linus 为了合并代码搞出来的么,印象里这是个代码很优雅的人物,怎么搞出来个这样的设计
    TravisMtg
        11
    TravisMtg  
       2022-06-26 07:43:49 +08:00 via iPhone
    这网站还有低情商高情商俩版本
    leavic
        12
    leavic  
       2022-06-26 09:51:17 +08:00
    cd ..
    sudo rm -r fucking-git-repo-dir
    git clone https://some.github.url/fucking-git-repo-dir.git
    cd fucking-git-repo-dir

    =======================
    这不就是我现在的操作吗。。。。。
    akagishigeru
        13
    akagishigeru  
       2022-06-26 10:06:16 +08:00 via iPhone
    @LeeReamond 也许他喜欢,而使用的并不喜欢
    Buges
        14
    Buges  
       2022-06-26 10:16:37 +08:00
    @leavic #12 没错,搞坏了还是这样最方便。还有一个对于本地库(如不小心 commit 了 sceret ),最直接的办法是 rm -rf .git && git init && git add . && git commit -m "init" 直接整个重置
    Rekkles
        15
    Rekkles  
       2022-06-26 10:30:43 +08:00
    我一直以为是我太菜了才会出现这些问题
    vivipure
        16
    vivipure  
       2022-06-26 12:38:34 +08:00
    git commit --amend 的确好用。我之前都是 git reset --soft ,然后重新提交的
    AloneHero
        17
    AloneHero  
       2022-06-26 14:31:12 +08:00 via Android
    就想知道 vscode 怎么用 worktree ,每次不想提交但又需要切换分支的时候巨麻烦
    realpg
        18
    realpg  
    PRO
       2022-06-26 15:09:40 +08:00
    @lzgshsj #3
    现在我精通 git 了,有时候懒也不会用 git 自带的机制操作
    跟 IDE 整合,commit 错了,正常就得敲命令了,我直接改回去再覆盖 commit 就不用命令行了
    fwindcore
        19
    fwindcore  
       2022-06-26 15:20:54 +08:00
    还缺少一个提交了一大堆才意识到忘记切换账号,把公司邮箱提交到开源项目里了。

    以前是用 filter-branch ,但是现在似乎推荐使用 filter-repo 了。不过都不太方便,参数太多,还不如写个 shell function 切换。
    MMMMMMMMMMMMMMMM
        20
    MMMMMMMMMMMMMMMM  
       2022-06-26 16:09:24 +08:00
    遇事不决加 --force
    Binb
        21
    Binb  
       2022-06-26 17:17:18 +08:00
    @ClericPy 为什么禁止,难道开发不是在自己分支上。
    ClericPy
        22
    ClericPy  
       2022-06-26 17:26:08 +08:00
    @Binb 早些年 code review 不健全的时候, 那个 amend 还有 cherrypick 老有人乱提, 结果把正在开发的人弄蒙了, 不过现在也无所谓了, 新公司特么的连 git 都不让用, 我已经佛了
    Binb
        23
    Binb  
       2022-06-26 17:37:54 +08:00
    @ClericPy 那确实,多人开发分支不能做 ammend 、rebase 等重写 commit id 的操作,真会把人搞懵逼确实难。我都是给自己用,提 mr 前整理自己分支,方便 review ,也方便回退
    Huelse
        24
    Huelse  
       2022-06-26 17:41:27 +08:00
    @AloneHero #17 git graph
    ClericPy
        25
    ClericPy  
       2022-06-26 18:15:56 +08:00
    @Binb rebase 得做... 不然不好看, 不过只能 rebase 到主上去. 唉一言难尽
    wdssmq
        26
    wdssmq  
       2022-06-26 18:29:32 +08:00
    水水的书签收藏
    https://wdssmq.github.io/bookmarks/#/

    想把这个教程加进我的书签收藏夹里,而我的书签是用 git 管理的,然后中间就了出现了因为我自己使用姿势的坑 - -

    累觉不爱。。
    Rache1
        27
    Rache1  
       2022-06-26 20:44:55 +08:00   3
    温馨提示,如果你在多人协作的环境里面,在需要使用到强制推送 (--force) 时,你应该优先使用 --force-with-lease 来代替。

    直接使用 --force 时,如果其他协作成员已经推送了新的提交,就会导致这段内容丢失,而使用 --force-with-lease 的时遇到这种情况,就会拒绝你的推送,避免一发自信的 --force 把别人内容搞掉了。
    sickoo
        28
    sickoo  
       2022-06-26 20:51:16 +08:00
    删是肯定得删的,只是看早晚
    aaronlam
        29
    aaronlam  
       2022-06-26 23:23:22 +08:00
    @Rache1 这个很有用,之前就有自信的同事直接 force 一把梭,然后出事了
    oyp
        30
    oyp  
       2022-06-26 23:25:22 +08:00
    我问一下,这个 Git 是工作了才会接触到吗,公司会教吗?为什么学校老师从来不说
    msg7086
        31
    msg7086  
       2022-06-27 02:10:35 +08:00 via Android
    @oyp 学校一般不教具体的工具。
    放在国外大学,很多课上要用到语言都不一定教。比如我们有一门课要用 Python ,老师默认你上课前自己学完。

    更何况学校有教学大纲,这东西不能随便变化。软件工具技术都是在飞速发展的,学校跟不上那么快的变化速度。
    msg7086
        32
    msg7086  
       2022-06-27 02:11:04 +08:00 via Android
    @oyp (低情商:老师也不懂。)
    msg7086
        33
    msg7086  
       2022-06-27 02:53:29 +08:00
    @LeeReamond 只花了几天时间搞出来的设计,你指望设计成啥样……
    所以才有后面无穷无尽的 alias 和各式各样的 GUI 把这些奇奇怪怪的 CLI 整理成结构化的功能。
    Doracis
        34
    Doracis  
       2022-06-27 17:45:25 +08:00
    有一个小白问题想问问大家, 就是我想修改已提交的信息, 在使用 git rebase -i HEAD~3 这个指令的时候, 出来的 commit 记录有 19 条, (这里就有点迷糊了) 然后 在修改的记录 前面改成 edit , 回车之后提示我当前的修改点是上一个, 总之就是不能修改 提示我用 git commoit --allow-empty 或者 git reset, 这个情况大家遇到过么
    GeruzoniAnsasu
        35
    GeruzoniAnsasu  
       2022-07-09 02:10:06 +08:00   1
    @Doracis rebase 到 3 个 commit 前出来 19 条没遇到过,但猜想是你 rebase 的目标经过了一个 merge commit ,导致历史混乱。应该先把 merge 后的 commit 暂存( cherry-pick 到临时分支或者 stash 起来),reset 掉 merge commit ,然后再重新 merge ,再 pick 回暂存的东西

    提示 allow empty 常见场景是你从 A 分支分岔开发 B 的时候发现有个 A 的 bug 要修,然后你在 B 上提交了一个 a(1),并且把这个 bug 告诉了其他人,它们也在 A 上提交了一个 a(2),当你要 rebaseA 把 B 的历史接到 A 后面时 a(1) 就是个空修改,因此可以直接舍弃掉。还有一种常见是 a(1)和 a(2)发生了冲突,你解决完冲突临时 commit 的修改与 a(2)相同,临时 commit 就变成了空的,也可以跳过
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2268 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 15:47 PVG 23:47 LAX 07:47 JFK 10:47
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86