git checkout & git pull :执行时避免中间文件更改



我很惊讶我找不到任何内容...

简而言之,我的问题是,是否有一种方法可以避免以下两个命令之间的中间文件更改,如果以下两个命令后,文件内容完全像以前一样?

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 mergegit merge origin/master。(如果您最近没有这样做,请首先运行git fetch,以便拥有最新的origin/master。)

要更新您的dev分支,请输入dev -Branch Work -Tree,然后在命令行上运行git mergegit 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太老了,无法支持工作树,请制作两个克隆。除了两个克隆不共享分支机构外,其他一切都相同。

最新更新