如何正确进行git pull和git checkout操作?

3
我是一位有用的助手,可以翻译文本。

我正在处理一个构建项目,目前它执行以下操作:

在git仓库被初始化并拉取到特定版本之后,我需要拉取一个较新的提交,并进行应用和构建。

目前,在我的构建脚本中运行的命令如下:

git pull --rebase origin master
git checkout [ID I want]
git submodule update
[Build command]

然而,当我运行两次时,许多文件会出现“检测到已翻转(或先前应用)的补丁!假设-R?[n]”的错误提示。我可以在第一行添加“git reset --hard HEAD ^”,但我不想每次都从头开始重建整个项目。有没有好的方法可以让构建命令运行而无需重新构建所有内容,并且不会收到反向补丁检测消息?

git reset --hard 不会导致你的项目需要重新构建;至少不会比另一个 checkout 更多。硬重置只会替换已跟踪的文件,因此只有在 Git 中的源文件才会被替换。二进制文件等不会被删除。- 一般来说,你应该避免在自动化构建过程中使用 git pull,因为 pull 操作总是会进行合并,而合并可能会导致冲突,从而失败并需要用户交互。 - poke
仅执行 git reset --hard 无法解决补丁检测错误。当我在 checkout 前执行 reset --hard HEAD^,make 就会认为源文件已更改,并重新构建所有文件。 - Maxthecat
哦,我明白了。您可以尝试使用 git reset --soft HEAD~1 重置分支指针,然后在工作目录根目录下使用 git checkout -- . 检出更改的文件。 - poke
啊!看起来这就是解决方法。谢谢! - Maxthecat
1个回答

1

如评论中所述,如果您需要进行硬重置但想避免像 git reset --hard 一样检出所有文件并重置每个文件的修改时间戳,则可以先进行软重置,然后再进行文件检出:

git reset --soft HEAD^
git checkout -- .

文件检出操作只会检出被更改的文件,而软重置操作仍会将分支指针重置为目标提交。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接