7

Is there a way to copy an untracked folder to another branch?

I know you can copy tracked folders to another branch by doing something like this:

git checkout mybranch
git checkout master -- myfolder

But is there a way to copy a folder that isn't tracked on master, but is tracked on the branch I want to copy to?

I'm trying to do this for GitHub pages and I'm following this guide, but he commits to master and pushes it to upstream gh-pages. I don't want to do that. I just want my build to generate the docs and copy the untracked docs to another branch and then push them upstream.

4

2 回答 2

3

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

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

git add folder

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

git stash save

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

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

让我们看一个完整的例子,涉及一个名为的文件topicfile,它只存在于一个分支中,并且在 on 时被创建为一个工作文件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,那没关系:我们稍后可以git reset --hard HEAD^在 master 上消除该提交。

于 2014-12-18T22:02:34.807 回答
0

如果该文件夹未被跟踪,那么您可以简单地checkout使用另一个分支并且不触及未跟踪的目录。

于 2014-12-18T02:34:19.343 回答