将现有的已提交工作移至git

时间:2019-07-25 16:20:33

标签: git

我创建了一个本地分支并进行了更改,但是后来为我创建了一个远程分支,我做了git fetch以获取对本地的访问。

现在如何将所有内容(包括未跟踪的文件)移到已创建的远程分支上?

我不想丢失任何工作,基本上我想要它,因此好像创建的这个新远程分支就是我一直在进行工作的地方,如果我打算删除本地分支的话这是有意义的我是最初创建的。

这可能令人困惑,所以让我举例说明。

我创建了一个名为ENGA-2604的本地分支,但是此分支现在不再使用。而是使用remotes/origin/feature/ENGA-2603

origin/feature/ENGA-2603是为我创建的,因此我的工作必须在该分支中,因为它所遵循的网络树必须与您在下面看到的相同: enter image description here

我创建的带有黄色轨迹线的ENGA-2604是我创建的,必须走了,因为它在错误的轨迹上。结果,为我创建了feature/ENGA-2603,红色轨道上的那个。因此,我所有的工作都必须在其中。

2 个答案:

答案 0 :(得分:1)

最简单的方法是为本地分支设置远程跟踪分支。确保先获取上游分支:

git fetch
git branch --set-upstream-to origin/feature/ENGA-2603 ENGA-2604

如果您还希望本地分支名称匹配,则可以重命名:

git branch -m feature/ENGA-2604 ENGA-2604

现在,您可以git pull合并其他开发人员的工作,或者git push进行自己的工作。

答案 1 :(得分:1)

  

现在如何将所有 包括未跟踪的文件 移至已创建的远程分支?

(重点是我的)

你不知道。幸运的是,您不需要。 旁注::我假设feature/ENGA-2603是一个错字,应该读为feature/ENGA-2604。如果没有,请在下面适当地更改字符串。

未跟踪的文件不在索引中,因此不在下一次提交中。 “未跟踪的文件”的定义是存在于工作树中但不存在于索引中的文件。分支仅包含提交。提交包含文件。当您检出该分支时,处于提交状态的文件会出现在索引中,因此,如果该文件不在索引中,则它将不在分支中。

据我所知,您目前在名为ENGA-2604的分支机构工作。也就是说,如果您运行git status,则其第一行将显示:

on branch ENGA-2604

(其余大多数行将讨论索引与HEAD提交之间的区别,以及工作树与索引之间的区别)。

您可以轻松地重命名任何分支,包括您所在的分支。因此,只需重命名此分支即可:

git branch -m feature/ENGA-2604

您现在正在一个名为feature/ENGA-2604的分支上工作。您可以将其上游设置为名称origin/feature/ENGA-2604

git fetch
git branch --set-upstream-to origin/feature/ENGA-2604

git fetch创建 origin/feature/ENGA-2604(因为feature/ENGA-2604现在存在于您称为origin的存储库中); --set-upstream-to将您的(本地)origin/feature/ENGA-2604设置为Git在比较您的(本地)feature/ENGA-2604与上游时应使用的名称。现在git status会说类似这样的话:

on branch feature/ENGA-2604 (ahead 2, behind 3)

如果/适当的话。

这三个命令git branch -mgit fetchgit branch --set-upstream-to对现有索引和工作树完全没有影响。因此,您现在所做的任何工作都没有任何改变。您刚刚重命名了您的本地分支,因此其名称现在为feature / ENGA-2604,并将其设置为{track {1}}的“ track” 1


1 这是一个可怕的动词,但Git使用的动词。当将远程跟踪名称设置为分支名称的上游时,诸如origin/feature/ENGA-2604之类的本地分支会“跟踪”诸如feature/ENGA-2604之类的远程跟踪名称。这样做的真正目的是说服Git在运行origin/feature/ENGA-2604时打印那些ahead 2和/或behind 3类型的字符串。

好吧,它做得更多:它使git statusgit pushgit merge都更加方便。它也使您可以使用git rebase,但我鼓励您避免 git pull。使用git pull,然后根据{{1}的内容,查看git fetch提取的提交,然后然后运行git fetchgit merge }。

如果您可以100%肯定(或足够接近)预测git rebase将要获取的内容,然后,则可以使用git fetch,它是< em>运行git fetch,然后运行git pullgit fetch中的一个:我已经选择了要使用的第二个命令,而没有查看git merge将要获取的内容。您可以通过Git配置或使用git rebase控制第二个命令。