V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
neptune15
V2EX  ›  程序员

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

  •  
  •   neptune15 · Jul 24, 2020 · 4759 views
    This topic created in 2104 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
        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   ·   968 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 58ms · UTC 20:41 · PVG 04:41 · LAX 13:41 · JFK 16:41
    ♥ Do have faith in what you're doing.