7

追跡されていないフォルダーを別のブランチにコピーする方法はありますか?

次のようにして、追跡されたフォルダーを別のブランチにコピーできることを知っています。

git checkout mybranch
git checkout master -- myfolder

しかし、マスターで追跡されていないが、コピー先のブランチで追跡されているフォルダーをコピーする方法はありますか?

私は GitHub ページに対してこれを実行しようとしており、このガイドに従っていますが、彼は master にコミットし、それをアップストリームの gh-pages にプッシュしています。私はそれをしたくありません。ビルドでドキュメントを生成し、追跡されていないドキュメントを別のブランチにコピーしてから、それらを上流にプッシュしたいだけです。

4

2 に答える 2

3

ここにあるのは、別のブランチの追跡されたファイルと競合する追跡されていないファイルがあるという状況です。そのブランチに切り替えたいのですが、checkoutできません。

git の「第 1 レベル」の解決策は、これらの追跡されていないファイルをインデックスに昇格させることです。

git add folder

今でもブランチにチェックアウトできません。ただし、新しい可能性が提示されます。次git stash saveの変更を行うことができます。

git stash save

これで、ブランチに切り替えて、git stash pop. この時点で、マージの競合があれば対処できます。その後に agit resetを入力すれば完了です。

[更新:git addgit 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、stash はまだ存在しています。でそれを取り除くことができ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 に答える