gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 13:02:49 25 4
gpt4 key购买 nike

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

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

git checkout mybranch
git checkout master -- myfolder

但有没有一种方法可以复制一个在 master 上未被跟踪,但在我要复制到的分支上被跟踪的文件夹?

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

最佳答案

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

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

git add folder

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

git stash save

现在您可以切换到分支,并执行 git stash pop。此时,您可以处理 merge 冲突(如果有),然后执行 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 中存在冲突,所以 stash 仍然存在。我们可以使用 git stash drop 清除它。

所有这些的替代方法不仅是 git add 未跟踪的文件到索引,而且是 git commit 以进行适当的提交。然后我们可以将提交挑选到分支中。如果我们不想在 master 上跟踪这些文件,那没关系:我们稍后可以在 master 上 git reset --hard HEAD^ 来消除该提交。

关于git - 将未跟踪的文件夹复制到另一个分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27538151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com