Git - 如何在两个单独的文件夹中处理两个单独的分支并毫无问题地推送到共同的来源
Git - how to work on two separate branches in two separate folders and push to common origin without problems
我目前在两个不同的分支中有两个版本的软件。一个版本发生了重大变化(重命名了一些文件夹,重命名了一些文件,删除了很多文件)。
我希望能够在两个版本上工作 - 例如在 master 中修复错误,将其推送到原点,也许将其合并到另一个分支中。
我刚刚尝试这样做,但有点困惑。我在 master 中修复了错误,并推送了它。我将 master 拉到另一个分支文件夹中。这似乎也融合了。我推了结果。
现在,如果我在 master 文件夹中进行另一个更改,并尝试推送所有分支,我会收到与另一个分支相关的投诉 "Updates were rejected because a pushed branch tip is behind its remote counterpart"。
然后我尝试将另一个分支拉到我的主文件夹中,但是合并很糟糕,我最终得到了错误的分支。我想我已经从中恢复过来,但我仍然无法从我的主文件夹中推送。
显然我误解了使用 TortoiseGit 的正确方法,谁能告诉我应该如何进行?
git branch -vv
的结果
in master folder:
CodeFirst 3b4d37b [origin/CodeFirst] Show 25 entries in DataTables if the screen is big enough.
CodeFirstWebFramework be03722 Added DocumentMemo to report fields.
SilverstreamMerge 778b791 default.js merge
* master 6c1254c [origin/master] Prevent Download button appearing twice in reports.
in branch (CodeFirstWebFramework) folder
* CodeFirstWebFramework 08b9117 Merge branch 'master' of //router/var/svn/AccountServer into CodeFirstWebFramework
master b7994b3 [origin/master: behind 2] Validate Schedule.RepeatFrequency
in origin (upstream repo on another machine)
CodeFirst 3b4d37b Show 25 entries in DataTables if the screen is big enough.
CodeFirstWebFramework 08b9117 Merge branch 'master' of //router/var/svn/AccountServer into CodeFirstWebFramework
SilverstreamMerge 778b791 default.js merge
* master 6c1254c Prevent Download button appearing twice in reports.
我想我(错误地)期望 pull
命令将所有分支的所有修订从上游仓库复制到本地仓库。有执行此操作的命令吗?
有一个 Git 方法叫做 "cherry pick":如果你在一个分支中有一个提交,你可以在另一个分支上应用这个提交。尝试使用它,但如果提交包含不存在的文件,因为它们已被重命名,那么我认为这种方法将不起作用(而且我认为没有可行的解决方案)。
切换到要应用提交的分支,在 TortoiseGit 中打开存储库的日志(在 TortoiseGit 上下文菜单中显示日志)。在左上角选择所有分支或您已应用提交的分支。找到提交,右键单击它,cherry pick this commit。如果成功不要忘记推送 :)
听起来您有两个克隆的存储库 - 一个签出到 master
,一个签出到 some_branch
。这是在本地保留两个分支的更多 "obvious" 方法,它不一定有任何问题,但这确实意味着您有两组本地分支引用。
如果是这种情况,您可能需要考虑 git work-tree
作为一个选项。有了这个,您可以将第二个工作树附加到单个本地存储库,因此可以将每棵树签出到不同的分支,而无需复制存储库的其他方面(如引用列表)。这可以让一切保持同步变得更简单。
至于你的情况……对我来说似乎并不明显;了解您使用的确切命令可能会有所帮助。一般来说,我可以说当 push
失败并显示该错误消息时,pull
可能会有所帮助(或者,如果您担心在不知道 为什么 [=23= 的情况下这样做) ] 首先,fetch
然后检查每个分支的本地和远程 ref 之间的差异)。
我目前在两个不同的分支中有两个版本的软件。一个版本发生了重大变化(重命名了一些文件夹,重命名了一些文件,删除了很多文件)。
我希望能够在两个版本上工作 - 例如在 master 中修复错误,将其推送到原点,也许将其合并到另一个分支中。
我刚刚尝试这样做,但有点困惑。我在 master 中修复了错误,并推送了它。我将 master 拉到另一个分支文件夹中。这似乎也融合了。我推了结果。
现在,如果我在 master 文件夹中进行另一个更改,并尝试推送所有分支,我会收到与另一个分支相关的投诉 "Updates were rejected because a pushed branch tip is behind its remote counterpart"。
然后我尝试将另一个分支拉到我的主文件夹中,但是合并很糟糕,我最终得到了错误的分支。我想我已经从中恢复过来,但我仍然无法从我的主文件夹中推送。
显然我误解了使用 TortoiseGit 的正确方法,谁能告诉我应该如何进行?
git branch -vv
in master folder:
CodeFirst 3b4d37b [origin/CodeFirst] Show 25 entries in DataTables if the screen is big enough.
CodeFirstWebFramework be03722 Added DocumentMemo to report fields.
SilverstreamMerge 778b791 default.js merge
* master 6c1254c [origin/master] Prevent Download button appearing twice in reports.
in branch (CodeFirstWebFramework) folder
* CodeFirstWebFramework 08b9117 Merge branch 'master' of //router/var/svn/AccountServer into CodeFirstWebFramework
master b7994b3 [origin/master: behind 2] Validate Schedule.RepeatFrequency
in origin (upstream repo on another machine)
CodeFirst 3b4d37b Show 25 entries in DataTables if the screen is big enough.
CodeFirstWebFramework 08b9117 Merge branch 'master' of //router/var/svn/AccountServer into CodeFirstWebFramework
SilverstreamMerge 778b791 default.js merge
* master 6c1254c Prevent Download button appearing twice in reports.
我想我(错误地)期望 pull
命令将所有分支的所有修订从上游仓库复制到本地仓库。有执行此操作的命令吗?
有一个 Git 方法叫做 "cherry pick":如果你在一个分支中有一个提交,你可以在另一个分支上应用这个提交。尝试使用它,但如果提交包含不存在的文件,因为它们已被重命名,那么我认为这种方法将不起作用(而且我认为没有可行的解决方案)。
切换到要应用提交的分支,在 TortoiseGit 中打开存储库的日志(在 TortoiseGit 上下文菜单中显示日志)。在左上角选择所有分支或您已应用提交的分支。找到提交,右键单击它,cherry pick this commit。如果成功不要忘记推送 :)
听起来您有两个克隆的存储库 - 一个签出到 master
,一个签出到 some_branch
。这是在本地保留两个分支的更多 "obvious" 方法,它不一定有任何问题,但这确实意味着您有两组本地分支引用。
如果是这种情况,您可能需要考虑 git work-tree
作为一个选项。有了这个,您可以将第二个工作树附加到单个本地存储库,因此可以将每棵树签出到不同的分支,而无需复制存储库的其他方面(如引用列表)。这可以让一切保持同步变得更简单。
至于你的情况……对我来说似乎并不明显;了解您使用的确切命令可能会有所帮助。一般来说,我可以说当 push
失败并显示该错误消息时,pull
可能会有所帮助(或者,如果您担心在不知道 为什么 [=23= 的情况下这样做) ] 首先,fetch
然后检查每个分支的本地和远程 ref 之间的差异)。