草庐IT

git - 如何删除以前添加的 git 子树及其历史记录

许多个月前,我在我的git存储库中添加了一个子树。这个子树包括几个文件夹和文件。我添加了子树而不是创建子模块(如推荐的那样)。现在我意识到我只想要子树中的一个文件,其余的都不想要。更糟糕的是,当其他人克隆我的存储库时,他们得到的不是预期的——与子树和我创建的其他代码有一些冲突。我可以通过获取文件/文件夹gitrmsubtree–folder1subtree_folder2subtree_files.*但是,我仍然留下了来自子树的冗长提交历史记录。自从我最初添加子树以来,我已经做了相当多的开发,并且不能丢失我生成的提交历史。简而言之,这就是我想要的:删除所有子树文件/文件夹。忘记所有子树

Git 从以前的提交范围创建分支?

我有一个OS项目的一堆提交,我想只提取最后的20个提交到另一个分支,这样我就可以pull请求。我该怎么做?原因是我可能有150次提交,但其中大部分是为了更大的贡献,还没有准备好。但下一个版本即将发布。谢谢! 最佳答案 您可以使用cherry-pick来做到这一点。如果您的long_branch历史记录如下:A-B并且您想将F到H的内容移动到不同的分支,例如short_branch,它基于master:gitcheckoutmaster-bshort_branch给出A-B然后...(注意提交范围是E..H;左侧不包含该范围)gitc

git - 无法取消忽略 Git 存储库中以前忽略的文件

我有一个站点,该站点有一个/sites/default/files/目录,用户内容通常保存在该目录中。考虑到我不需要跟踪这些东西,我将/sites/default/files/添加到我的.gitignore文件中。然后我发现我还想在那个目录中保留一些大部分是永久性的上传。现在更有意义的是跟踪/sites/default/files/中的所有内容并排除不需要的子目录,而不是反过来。问题是Git不会停止忽略该目录。我已经从.gitignore中删除了指定此目录的行,它不会跟踪它。我可以选择使用gitadd/sites/default/files/-f来强制git跟踪目录,但我以前做过,看起

git - 让 Git 确认以前移动的文件

我不假思索地手动移动了一堆文件,但无法找到一种方法让git识别出这些文件只是被移动了,实际上并不是不同的文件。除了删除旧的并添加新的(从而丢失历史记录)或使用git-mv重做所有更改之外,还有其他方法可以做到这一点吗? 最佳答案 要让git删除已经删除或移动的文件,只需输入gitadd-u 关于git-让Git确认以前移动的文件,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/14

git - 如何将 Git 中的文件添加到以前的子模块的路径中?

我有一个项目曾经包含一个子模块,路径为mysubmodule。我从源代码(1.8.3-rc2)安装了最新的Git并运行了gitsubmoduledeinitmysubmodule。然后我删除了.gitmodules文件并提交了更改。我还从mysubmodule文件夹中删除了.git目录。我现在想将mysubmodule中的文件直接提交到我的存储库中,但git说没有任何更改。如果我输入gitaddmysubmodule它什么都不做。如果我输入gitaddmysubmodule/file.txt它说fatal:Path'mysubmodule/file.txt'isinsubmodule'

git - pull 后如何区分更改的文件与以前的版本?

当我运行“gitpull”时,我经常想知道文件的最新版本和新版本之间发生了什么变化。假设我想知道其他人对特定文件提交了什么。这是怎么做到的?我假设它是“gitdiff”,带有一些用于提交x和提交y的参数,但我似乎无法理解语法。我还发现“gitlog”有点令人困惑,我不确定从哪里获取最新版本文件和新文件的提交ID。 最佳答案 指定提交的方式有很多种-请参阅specifyingrevisionsmangit-rev-parse部分了解更多详细信息。在这种情况下,您可能想要:gitdiffHEAD@{1}@{1}的意思是“我指定的ref的

Git,重写以前的提交用户名和电子邮件

我已经向Github上的一个项目提交了一堆提交,但是我意识到我没有在我当前用于提交的计算机上设置正确的电子邮件和提交者全名,因此没有设置用户头像和电子邮件地址不存在。如何重写所有过去的提交电子邮件和用户名? 最佳答案 您可以添加这个别名:gitconfig--globalalias.change-commits'!'"f(){VAR=\$1;OLD=\$2;NEW=\$3;shift3;gitfilter-branch--env-filter\"if[[\\\"\$\`echo\$VAR\`\\\"='\$OLD']];thenex

git - 如何将 HEAD 移回以前的位置? (分离头)和撤消提交

在Git中,我试图通过merge到另一个分支然后通过以下方式将HEAD重置到之前的位置来执行squashcommit:gitresetorigin/master但我需要走出这一步。如何将HEAD移回之前的位置?我有我需要将其移动到的提交的SHA-1片段(23b6772)。我怎样才能回到这个提交? 最佳答案 在回答之前,让我们添加一些背景,解释一下这个HEAD是什么是。FirstofallwhatisHEAD?HEAD只是对当前分支上当前提交(最新)的引用。只能有一个HEAD在任何给定时间(不包括gitworktree)。HEAD的内

git - 如何将 Git 管理项目中的所有本地更改恢复到以前的状态?

我运行了gitstatus,它告诉我一切都是最新的并且没有本地更改。然后我做了几个连续的改变,意识到我想扔掉一切,回到我原来的状态。这个命令会为我做吗?gitreset--hardHEAD 最佳答案 要恢复对工作副本所做的更改,请执行以下操作:gitcheckout.或者等效地,对于git版本>=2.23:gitrestore.要恢复对索引所做的更改(即,您已添加的更改),请执行此操作。警告这会将您所有未推送的提交重置为master!:gitreset要还原您已提交的更改:gitrevert要删除未跟踪的文件(例如,新文件、生成的文

php - pecl 为以前的 php 版本安装

我已将我的MacBook升级到Mavericks并破坏了我的开发环境。我现在遇到的问题是我的pear/pecl仍然尝试安装我以前的(5.3)版本的PHP而不是5.4版本。PHP版本:$php-vPHP5.4.17(cli)(built:Aug25201302:03:38)Copyright(c)1997-2013ThePHPGroupZendEnginev2.4.0,Copyright(c)1998-2013ZendTechnologieswithXdebugv2.2.3,Copyright(c)2002-2013,byDerickRethanspear$pearversionPEAR