Git checkout commit,做东西,然后回到主人

时间:2012-08-20 19:00:50

标签: git branch git-checkout

我有一个构建系统,它接受一个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

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

我问,因为我看到“你的主人和出身/主人分歧”有时候,虽然我不确定是由此引起的。

提前致谢。

5 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

您提到了从原点撤消更改。在您的情况下,您还可以使用git reset --hard SHA1返回特定提交,然后使用git pull origin/master {{1}}中缺少的更改。

答案 3 :(得分:0)

根据您的描述,您可以执行以下操作:

git archive -o /some/where/archive.tar.gz --prefix =< something> <提交> <文件列表>

请查看git存档手册以了解详细信息。您可以创建zip文件,tar文件(压缩或不压缩),在打包文件的“上方”放置一个前缀,所有这些都取自引用的提交。

答案 4 :(得分: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>