将某些文件提交到新分支

时间:2016-07-11 16:41:58

标签: git

假设我的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.htmldocs/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分支的历史。

思考?

1 个答案:

答案 0 :(得分:0)

只需添加html文件,您只需运行git add *.html

  

以某种方式破坏现有分支并创建包含这些文件的单个提交?

据此我猜您只关心文件的当前状态,但我不建议这样做。保持历史总是有帮助的。但是,在本地修改 gh-pages 分支后,您始终可以git push -f origin gh-pages。通过这种方式,您的分支将始终包含一个包含最近更改的提交。

  

是否可以在不运行git checkout gh-pages的情况下执行此操作?

嗯,你现在正在这样做,但它非常冗长。给this answer看一看。虽然签到分支机构也可以避免您在当前的方法中执行git resetgit clean