4

我有一个构建系统,它需要一个 git 存储库,返回到特定的提交,然后将这些文件上传到某个地方。然后是回到主人那里。

我不确定我是否使用了正确的 Git 命令,因为每当我执行以下命令时,Git 都会给我这个消息git checkout SHA

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

git checkout -b new_branch_name

我唯一想做的就是将我的工作目录重置为特定的提交,上传这些文件,然后返回 HEAD/master。当我转到特定的提交 SHA(将 XML 转换为 JSON 或其他东西)时,我可能会对文件进行一些更改,但是当我回到 master 时,我只想放弃所有这些更改。现在这是我的代码

git checkout SHA

# do a bunch of conversion and uploading

git checkout master

这是做我想做的事的首选方式吗?我是否总是能够从原点进行拉取而不发生任何文件冲突(我不想在结帐之间保留我正在做的任何事情)?

我之所以问,是因为我有时会看到“您的主人和起源/主人分歧”,尽管我不确定这是由此引起的。

提前致谢。

4

5 回答 5

3

这样做完全没问题。当 HEAD 与分支名称不对应时,它将显示为分离的 HEAD。没有错。

于 2012-08-20T19:12:39.560 回答
2

您还可以使用git show SHA1:relative/path在特定点拍摄文件的快照。

于 2012-08-20T19:47:39.603 回答
0

对于您所描述的,您可以执行以下操作:

git archive -o /some/where/archive.tar.gz --prefix=<something> <commit> <file list>

查看 git archive 的手册以获取血淋淋的细节。您可以创建 zip 文件、tar 文件(压缩或未压缩),可选择在打包文件的“上方”放置一个前缀,所有这些都取自引用的提交。

于 2013-01-17T03:09:44.553 回答
0

这是我在成功构建 Bamboo 后用于将 API、测试和代码覆盖率报告发布到我的 github 页面(gh-pages 分支)的工具。它是一个执行您描述的事情的 Ant 目标。(这里有很多好的答案,但发布以防万一)。

<target name="--publish.site">
    <echo file="${temp.dir}/publish-site.sh">
        #!/bin/sh
        cd ${basedir}
        cp -fr ${basedir}/schema ${reports.dir}
        git remote set-url origin git@github.com:jasperblues/my-project.git
        git fetch origin gh-pages:gh-pages
        git checkout gh-pages
        git pull
        rm -fr ./coverage
        cp -fr ${reports.dir}/coverage/ ./coverage
        git add ./coverage
        rm -fr ./api
        cp -fr ${reports.dir}/api ./api
        git add api
        cp -fr ${reports.dir}/schema ./schema
        git add schema
        git commit -a -m "publish reports to gh-pages"
        git push -u origin gh-pages
        git checkout master
    </echo>
    <chmod perm="+x" file="${temp.dir}/publish-site.sh"/>
    <exec executable="${temp.dir}/publish-site.sh" failonerror="true" failifexecutionfails="true">
        <env key="PATH" value="${tools.paths}"/>
    </exec>
</target>
于 2013-01-17T03:18:34.370 回答
0

您提到从原点拉取更改。在您的情况下,您还可以使用git reset --hard SHA1返回到特定提交,然后git pullorigin/master.

于 2012-08-20T19:15:33.357 回答