将未跟踪的文件夹复制到另一个分支

时间:2014-12-18 02:09:46

标签: git deployment continuous-integration branch wercker

有没有办法将未跟踪的文件夹复制到另一个分支?

我知道您可以通过执行以下操作将跟踪的文件夹复制到另一个分支:

git checkout mybranch
git checkout master -- myfolder

但有没有办法在master上复制未跟踪的文件夹,但在我要复制到的分支上跟踪

我正在尝试为GitHub页面执行此操作,并且我正在关注此guide,但他承诺掌握并将其推送到上游gh-pages。我不想那样做。我只是希望我的构建生成文档并将未跟踪的文档复制到另一个分支,然后将它们推送到上游。

2 个答案:

答案 0 :(得分:2)

您在这里遇到的情况是,您有一些未跟踪的文件与另一个分支中的跟踪文件冲突。您想切换到该分支,但checkout不会让您。

"第一级" git中的解决方案是将这些未跟踪的文件提升到索引:

git add folder

现在你仍然无法结账。但是,您会看到一种新的可能性:您可以git stash save更改:

git stash save

现在您可以切换到分支,然后执行git stash pop。此时,您可以处理合并冲突(如果有),然后是git reset,并且您已完成。

[更新: git add没有必要,因为git stash可以选择包含未跟踪的文件!]

让我们完成一个完整的示例,涉及一个名为topicfile的文件,该文件只存在于一个分支中,并在master上创建为工作文件,但内容不同:

~$ mkdir gittest
~$ cd gittest/
~/gittest$ git init
Initialized empty Git repository in /home/kaz/gittest/.git/
~/gittest$ touch emptyfile
~/gittest$ git add emptyfile
~/gittest$ git commit -m "starting repo"
[master (root-commit) 75ea7cd] starting repo
 0 files changed
 create mode 100644 emptyfile
~/gittest$ git branch
* master
~/gittest$ git checkout -b topic
Switched to a new branch 'topic'
~/gittest$ cat > topicfile
a
b
c
d
e
~/gittest$ git add topicfile
~/gittest$ git commit -m "topicfile"
[topic 875efc5] topicfile
 1 file changed, 5 insertions(+)
 create mode 100644 topicfile
~/gittest$ git checkout master
Switched to branch 'master'
~/gittest$ ls
emptyfile
~/gittest$ cat > topicfile
@
a
b
c
d
e
f
g
h
~/gittest$ git add topicfile
~/gittest$ git stash save topicfile
Saved working directory and index state On master: topicfile
HEAD is now at 75ea7cd starting repo
~/gittest$ git checkout topic
Switched to branch 'topic'
~/gittest$ git stash pop
Auto-merging topicfile
CONFLICT (add/add): Merge conflict in topicfile
~/gittest$ cat topicfile
<<<<<<< Updated upstream
=======
@
>>>>>>> Stashed changes
a
b
c
d
e
<<<<<<< Updated upstream
=======
f
g
h
>>>>>>> Stashed changes
~/gittest$ cat > topicfile  # resolve in favor of stashed changes:
@
a
b
c
d
e
f
g
h
~/gittest$ git add topicfile
~/gittest$ git reset
Unstaged changes after reset:
M       topicfile
~/gittest$ git diff
diff --git a/topicfile b/topicfile
index 9405325..bea0ebb 100644
--- a/topicfile
+++ b/topicfile
@@ -1,5 +1,9 @@
+@
 a
 b
 c
 d
 e
+f
+g
+h

此时我们可以将topicfile更改提交到topic分支,但master上仍未跟踪该文件。

由于git stash pop中存在冲突,因此存储仍然存在。我们可以使用git stash drop清除它。

所有这一切的替代方案不仅是git add未跟踪文件到索引,而且要git commit进行正确提交。然后我们可以选择提交到分支。如果我们不希望在master上跟踪这些文件,那就没关系:我们可以在master上git reset --hard HEAD^以消除该提交。

答案 1 :(得分:0)

如果该文件夹未跟踪,则您只需checkout另一个分支,并且不会触及未跟踪的目录。