假设我的master
分支上有以下4个文件
$ ls
README.txt documentation.html main.py docs/main.html
$ git branch -a
* master
remotes/origin/gh-pages
remotes/origin/master
Q值。我应该运行什么命令来将html文件documentation.html
和docs/main.html
提交到单独的分支gh-pages
,以便它破坏现有分支并创建单个提交包含那些文件?我还想把它们推到远程机器上。是否可以在不运行git checkout gh-pages
的情况下执行此操作?
我目前的解决方案是使用以下命令
git branch -D gh-pages || echo "Delete local branch failed. It is possible that local branch exists"
git checkout --orphan gh-pages
git rm --cached $(git ls-files) # unstage existing files
# Currently using python add_files.py to do this instead
# subprocess.call('git add {}'.format(html_file)')
find . -name '*.html' | xargs git add
git commit -m "Commit all html files. This commit message does not matter"
git reset $(git commit-tree HEAD^{tree} -m "Generate Sphinx Documentation") # Creates a single commit from current branch
git push --set-upstream origin gh-pages --force
git clean -fxd # Since I unstaged existing files, they will cause conflicts on running the next command if not removed
git checkout master
git pull # Just to make sure master and origin/master are in sync
在我看来,这并不优雅,但它确实有效。我想知道是否有更好的方法来做到这一点?此“脚本”的目的是在ContinuousIntegration服务器上生成文档,并将文档推送到远程存储库上的gh-pages
分支,以利用GitHub页面或GitLab页面。我并不关心gh-pages分支的历史。
思考?
答案 0 :(得分:0)
只需添加html文件,您只需运行git add *.html
。
以某种方式破坏现有分支并创建包含这些文件的单个提交?
据此我猜您只关心文件的当前状态,但我不建议这样做。保持历史总是有帮助的。但是,在本地修改 gh-pages 分支后,您始终可以git push -f origin gh-pages
。通过这种方式,您的分支将始终包含一个包含最近更改的提交。
是否可以在不运行
git checkout gh-pages
的情况下执行此操作?
嗯,你现在正在这样做,但它非常冗长。给this answer看一看。虽然签到分支机构也可以避免您在当前的方法中执行git reset
和git clean
。