我创建了一个本地分支并进行了更改,但是后来为我创建了一个远程分支,我做了git fetch
以获取对本地的访问。
现在如何将所有内容(包括未跟踪的文件)移到已创建的远程分支上?
我不想丢失任何工作,基本上我想要它,因此好像创建的这个新远程分支就是我一直在进行工作的地方,如果我打算删除本地分支的话这是有意义的我是最初创建的。
这可能令人困惑,所以让我举例说明。
我创建了一个名为ENGA-2604
的本地分支,但是此分支现在不再使用。而是使用remotes/origin/feature/ENGA-2603
。
origin/feature/ENGA-2603
是为我创建的,因此我的工作必须在该分支中,因为它所遵循的网络树必须与您在下面看到的相同:
我创建的带有黄色轨迹线的ENGA-2604
是我创建的,必须走了,因为它在错误的轨迹上。结果,为我创建了feature/ENGA-2603
,红色轨道上的那个。因此,我所有的工作都必须在其中。
答案 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 -m
,git fetch
和git 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 status
和git push
和git merge
都更加方便。它也使您可以使用git rebase
,但我鼓励您避免 git pull
。使用git pull
,然后根据{{1}的内容,查看git fetch
提取的提交,然后然后运行git fetch
或git merge
}。
如果您可以100%肯定(或足够接近)预测git rebase
将要获取的内容,然后,则可以使用git fetch
,它是< em>运行git fetch
,然后运行git pull
或git fetch
中的一个:我已经选择了要使用的第二个命令,而没有查看git merge
将要获取的内容。您可以通过Git配置或使用git rebase
控制第二个命令。