Git签出提交,做一些事情,然后返回master



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

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

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

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

我之所以这么问,是因为我有时会看到"你的主人和起源/主人分道扬镳",尽管我不确定这是为什么。

提前谢谢。

这样做是完全可以的。当HEAD与分支名称不对应时,它将显示为分离的HEAD。这没什么错。

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

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

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

git archive-o/some/where/archive.tar.gz--前缀=<某事>lt;提交>lt;文件列表>

请参阅gitarchive的手册,了解血腥的细节。您可以创建zip文件、tar文件(无论是否压缩),也可以在打包文件的"上方"放置前缀,所有这些都来自引用的提交。

这是我在Bamboo构建成功后用来将API、测试和代码覆盖率报告发布回我的github页面(gh-pages分支)的内容。它是蚂蚁的目标,做你描述的那种事情。(这里有很多不错的答案,但如果有帮助的话可以发布)。

<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>

相关内容

最新更新