如何在存储库的两个本地副本之间传输一系列 Git 提交?

M. *_*tin 2 git

目前,我在我的机器上签出了同一个 Git 项目的两个副本。我知道传统上人们不会这样做;更典型的做法是检查项目一次并根据需要切换分支。我拥有第二个副本的主要原因是,我可以在 IDE 中本地查看合并请求 \xe2\x80\x94\xc2\xa0,以及运行代码 \xe2\x80\x94,而无需从任何内容切换上下文我可能正在进行工作。该工作可能不适合我隐藏、提交或停止运行长时间运行的进程。

\n

我不小心在本地对项目的错误副本进行了一些更改,并希望将它们移动到正确的副本。

\n

我知道我可以创建一个分支,将它们推送到服务器,在另一个分支上检查它们,然后删除远程分支。这并不是太繁重。

\n
cd /path/to/source-project\n\ngit switch -c myTempBranch\ngit push -u origin myTempBranch\n\ncd /path/to/other-project\n\ngit pull\ngit merge myTempBranch\ngit push -d origin myTempBranch\n
Run Code Online (Sandbox Code Playgroud)\n

话虽如此,这些更改还没有准备好供其他人使用,如果我可以在本地完成所有这些操作而无需涉及远程服务器,那就太好了。

\n

有没有一种方法可以将一个签出的 get 项目中的一系列提交应用到该项目的不同副本而不推送它?

\n

Ren*_*ink 6

您可以将本地存储库添加为远程存储库并获取它以获取更改。例如

git remote add repoWithChanges file:///<path_to_remote>

git fetch repoWithChanges
Run Code Online (Sandbox Code Playgroud)

现在,在获取其他存储库的更改后,您可以进行挑选、合并等操作。

PS:如果您需要第二个工作树来处理拉取请求,您可以使用

 git worktree add /some/path/to/checkout someBranch
Run Code Online (Sandbox Code Playgroud)

  • 我已经专业使用 Git 十多年了,从头到尾阅读了 Pro Git(第一版),并回答了许多关于 Git 的 SO 问题,并且从未跨过工作树。这太棒了,你是对的——几乎可以肯定我应该使用什么。 (3认同)