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

2020-05-01 19:27:06 +08:00
 dingyaguang117
弄了个自动部署的脚本,现在有个问题想请教一下 git 大佬

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

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

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


试验过下面脚本

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

会有问题(本地会出现很多 modifed 状态的文件),请教上面的脚本为啥会有问题
1162 次点击
所在节点    问与答
4 条回复
yukiloh
2020-05-01 19:52:03 +08:00
绑定,顺便问一个我自己遇到的问题
master 用于公共展示
dev 分支用于开发,但是 dev 会有很多琐碎的开发文件,每次完成小阶段提交到 master 前都要手动清理一下,有啥好方案吗,难道是.ign 来写规则
dingyaguang117
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
2020-05-01 19:59:06 +08:00
@yukiloh 或者你用一个 GUI 管理工具,每次只把代码文件 add 到 stage,也就是过完代码拖一下的事情
billlee
2020-05-02 00:11:04 +08:00
看各个 CI 平台构建的时候一般都是 detached head 状态,如果我来写大概会这样吧:

```
git fetch
git checkout --force $(git rev-parse origin/test)
git clean -f -d
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/667949

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX