我很惊讶我找不到任何内容...
简而言之,我的问题是,是否有一种方法可以避免以下两个命令之间的中间文件更改,如果以下两个命令后,文件内容完全像以前一样?
git checkout dev
git pull
动机是(仅符合其中一种动机的解决方案总比没有好):
- 如果不需要,我想避免我的IDE重新加载文件(是,VS项目文件...)。
- 避免藏匿并没有真正更改的文件。
这是一个非常普遍的情况,当我使用远程源控制服务器合并到Origin/Dev之后,我从功能分支回到主人分支。
。我希望在此之前执行git fetch origin dev
会解决此问题,但事实并非如此。我也找到了一些这样的答案,这些答案谈论将命令组合在一起以使其轻松,但没有针对文件更改问题。
我进入相同的情况,在寻找更简单的替代方案之后,我刚刚找到了我需要的东西:
在不切换的情况下拉动另一个分支:
您不能将分支B合并到分支a中,而不必查看第一个,如果它会导致非快速合并。这是因为需要工作副本来解决任何潜在的冲突。
此命令仅适用于快速的合并。
git fetch origin master:master
(将master
替换为要更新的分支。在OP的情况下,它将是git fetch origin dev:dev
)
一旦更新了本地分支,您可以切换到所需的分支而不引起文件更改
参考:
- https://superuser.com/questions/163033/pull-for-another-git-branch-without-switching
- 合并,更新和拉动git分支而不使用结帐
使用git worktree add
有一种方法可以做到这一点。确保您的git至少为2.5(使其具有git worktree
),最好至少为2.15(用附加的工作室修复了相当严重的错误;如果没有修复,则不应超过两个星期,通常不应使用额外的工作室)。
您的IDE可能与git worktree add
不相容;我避免使用IDE,所以不能说哪些与之合作,哪些不合作。
假设您有一个支持添加工作室的GIT版本,请使用git worktree add
创建dev
分支,然后将主工作室留在master
分支上。或者,使用添加的工作树作为主(主或其他分支),以及dev
分支的主要工作树。请记住,git执行每个工作树都有不同的分支。
停止使用git pull
。(这不是严格必要的,但我建议。)
要从服务器更新存储库,请在任何一个工作树中使用git fetch
(没有其他参数)。这获得了您没有的任何新提交,并更新您的origin/*
远程跟踪名称。
要更新您的master
分支,请输入master
-Branch Work -Tree,然后在命令行上运行git merge
或git merge origin/master
。(如果您最近没有这样做,请首先运行git fetch
,以便拥有最新的origin/master
。)
要更新您的dev
分支,请输入dev
-Branch Work -Tree,然后在命令行上运行git merge
或git merge origin/dev
。和以前一样,如果您最近没有运行git fetch
,则可能要先执行此操作,以使您的origin/master
是最新的。
您的IDE可能会或可能无法实现命令行所做的事情。根据IDE,也许可以运行两个副本,一个在每个工作树中。
记住,所有git pull
均为运行git fetch
,然后运行git merge
(或git fetch
,然后是git rebase
)。是git checkout
与您的工作树文件上的时间戳记混乱。git并不真正使用或需要工作树:那是 you 。运行git checkout
将工作树中的文件替换为其他提交的文件,同时还替换索引中的文件;索引副本是git的使用和关心。
git替换了工作树文件,因为它假设您需要切换到分支的文件。当然,切换后再更新这些工作树文件。因此,现在各种文件已更新两次,需要重建。
当您添加新的工作树时,git实际上添加了三个项目的组:
- 新工作树的新
HEAD
,以记住新工作树中的当前犯罪和/或分支; - 新工作树的索引,Git用于存储您可能做出的下一个提交的Git文件;和
- 新的工作树本身,供您查看和使用文件。
此工作树只是主要存储库工作树之外的目录(或文件夹)。例如,如果您的主要存储库在~/work/project
中,则可以将其移至~/work/project/main
并创建~/work/project/dev
以保持dev
-Branch Work -Tree。
从根本上讲,问题很简单:当您使用git checkout
时,git 替换 均可根据需要。因此,您需要停止使用git checkout
。如果您需要两个工作树,请进行两个单独的工作树。
如果您的git太老了,无法支持工作树,请制作两个克隆。除了两个克隆不共享分支机构外,其他一切都相同。