V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
dingyaguang117
V2EX  ›  问与答

各位 Git 大佬,请教一个问题

  •  
  •   dingyaguang117 · 2020-05-01 19:27:06 +08:00 · 1161 次点击
    这是一个创建于 1454 天前的主题,其中的信息可能已经有所发展或是发生改变。
    弄了个自动部署的脚本,现在有个问题想请教一下 git 大佬

    简单来讲就是需要:切换到指定分支的最新 commit,但是需要考虑到下面的几种情况

    (假设需要切换到 test 分支)

    1. 本地没有 test 分支
    2. 当前分支有未提交的改动(可以直接 reset 操作)
    3. 本地有 test 分支,但是不是最新
    4. 当前分支可能已经在 test 或者不在


    试验过下面脚本

    ```
    git reset --hard;
    git fetch -u origin test:test;
    git checkout test;
    ```

    会有问题(本地会出现很多 modifed 状态的文件),请教上面的脚本为啥会有问题
    4 条回复    2020-05-02 00:11:04 +08:00
    yukiloh
        1
    yukiloh  
       2020-05-01 19:52:03 +08:00 via Android
    绑定,顺便问一个我自己遇到的问题
    master 用于公共展示
    dev 分支用于开发,但是 dev 会有很多琐碎的开发文件,每次完成小阶段提交到 master 前都要手动清理一下,有啥好方案吗,难道是.ign 来写规则
    dingyaguang117
        2
    dingyaguang117  
    OP
       2020-05-01 19:57:21 +08:00
    刚才又重新测试了一下, 问题出现在下面一行:

    git fetch -u origin test:test;

    如果当前分支已经是 test,会更新 test 分支指向最新 commit, 但是不会更新本地工作区,所以本地的出现很多 modified 状态的文件;

    这时候再 git reset --hard 一次就好了。

    更新了一下,下面的脚本应该能满足上述 4 种情况,无论当前在哪个分支,是否有改动,本地 test 分支是否存在,都可以切换到最新的 test 分支

    ```
    git reset --hard;
    git fetch -u origin test:test;
    git checkout test;
    git reset --hard;
    ```
    dingyaguang117
        3
    dingyaguang117  
    OP
       2020-05-01 19:59:06 +08:00
    @yukiloh 或者你用一个 GUI 管理工具,每次只把代码文件 add 到 stage,也就是过完代码拖一下的事情
    billlee
        4
    billlee  
       2020-05-02 00:11:04 +08:00   ❤️ 1
    看各个 CI 平台构建的时候一般都是 detached head 状态,如果我来写大概会这样吧:

    ```
    git fetch
    git checkout --force $(git rev-parse origin/test)
    git clean -f -d
    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5099 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 03:52 · PVG 11:52 · LAX 20:52 · JFK 23:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.