关于 Git 在不同 commit 之间切换的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
请不要在回答技术问题时复制粘贴 AI 生成的内容
neptune15

关于 Git 在不同 commit 之间切换的问题

  •  
  •   neptune15 Jul 24, 2020 4756 views
    This topic created in 2103 days ago, the information mentioned may be changed or developed.
    • 需求

    阅读一个开源项目的时候希望能够看到作者思考 /项目发展的过程,所以打算从最开始的 commit 挨个 /跳着看一下

    • 现有的解决办法

    可以 git checkout first_id 回到第一个 commit,但是需要 git checkout HEAD@{1} 返回,git log 拿到第二个 commit 的 id,再去 git checkout second_id 阅读第二次提交

    sof 上找到了下面的命令看起来可以在 commit 之间前后跳转

    function n() { git log --reverse --pretty=%H master | grep -A 1 $(git rev-parse HEAD) | tail -n1 | xargs git checkout } function p() { git checkout HEAD^1 } 
    • 问题
    1. 没能找到 Git 原生的解决方案,是这个需求不成立?
    2. 有没有更好的解决方案(比如可以前后跳转,也支持回到初始的 commit 之后还可以前往任意 commit )?
    Supplement 1    Jul 24, 2020

    GUI工具的话,@ysc3839 推荐的gitk可以满足commit之间跳转的需求

    “gitk 就能满足需求吧,列表中显示所有 commit,右键 reset branch to current commit 就能切换。”

    22 replies    2020-07-24 20:26:45 +08:00
    maninfog
        1
    maninfog  
       Jul 24, 2020 via Android
    seki
        2
    seki  
       Jul 24, 2020
    一般都是 diff 着来看?
    Shawlaw
        3
    Shawlaw  
       Jul 24, 2020 via iPhone
    像这种,git rebase -i 我感觉就能满足你的需求,可以去了解一下。
    renmu123
        4
    renmu123  
       Jul 24, 2020 via Android
    我用 pycharm 自带的 git 可以 reset hard 到第一个 commit 后再直接选择下一个 commit,还支持 diff
    hankai17
        5
    hankai17  
       Jul 24, 2020
    利用分离头指针看很麻烦
    msg7086
        6
    msg7086  
       Jul 24, 2020
    花几分钟找个好用的 GUI 吧。双击切换 commit 不香吗。
    neptune15
        7
    neptune15  
    OP
       Jul 24, 2020
    @maninfog 跟上面贴的差不太多,不过多谢了
    neptune15
        8
    neptune15  
    OP
       Jul 24, 2020
    @msg7086 恩,好久之前用过小乌龟
    neptune15
        9
    neptune15  
    OP
       Jul 24, 2020
    @Shawlaw thx
    neptune15
        10
    neptune15  
    OP
       Jul 24, 2020
    @renmu123 恩,那 JetBrains 家的估计都可以
    silentsee
        11
    silentsee  
       Jul 24, 2020
    推荐一个 GUI,fork https://fork.dev
    neptune15
        12
    neptune15  
    OP
       Jul 24, 2020
    @silentsee thx!
    ysc3839
        13
    ysc3839  
       Jul 24, 2020 via Android
    gitk 就能满足需求吧,列表中显示所有 commit,右键 reset branch to current commit 就能切换。
    RandomJames
        14
    RandomJames  
       Jul 24, 2020   1
    其实按照 tag 和 change log 来看就好了,并不一定要看每次提交。如果要看单次提交,用 git diff 比较多点 :)
    neptune15
        span class="no">15
    neptune15  
    OP
       Jul 24, 2020
    @RandomJames 恩是的,挨个确实没啥必要,只是感觉 git 在 commit 之间的跳转不是很方便
    neptune15
        16
    neptune15  
    OP
       Jul 24, 2020
    @ysc3839 试了一下,跳转确实很方便,看起来对应的是 git reset,不过可以看到所有的 commit
    idealhs
        17
    idealhs  
       Jul 24, 2020
    下个 GUI 点啊点看着很方便,很少见用命令行的大神
    340244120w
        18
    340244120w  
       Jul 24, 2020
    合格的 git 玩家都选择从 commit checkout 一个新分支
    darksword21
        19
    darksword21  
    PRO
       Jul 24, 2020
    magit 欢迎你
    guoqiao
        20
    guoqiao  
       Jul 24, 2020
    你需要 tig 这个工具
    Madcrow
        21
    Madcrow  
       Jul 24, 2020 via Android
    vscode+gitlens
    mxalbert1996
        22
    mxalbert1996  
       Jul 24, 2020 via Android
    这个难道不是任何 GUI 都能轻松完成的吗?
    About     Help     Advertise     Blog     API     FAQ     Solana     2527 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 76ms UTC 16:08 PVG 00:08 LAX 09:08 JFK 12:08
    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