cp -vru,但省略.git文件夹和所有生成的文件)。这让我失去了一周的历史记录,但仍然让我回溯到项目开始之前的过去,这是我喜欢的。
为了减轻这种损失的痛苦,我使用git log --date=short --pretty="format:%cd - %s" --name-status创建了一个详细的提交消息摘要,这至少给了我一个机会返回到这个条目并查看带有描述的消息。
但是,这对于文件删除是不起作用的,而且你也不知道哪个更改实际上属于巨大的提交消息的哪个部分。
cp -vru,但省略.git文件夹和所有生成的文件)。这让我失去了一周的历史记录,但仍然让我回溯到项目开始之前的过去,这是我喜欢的。
为了减轻这种损失的痛苦,我使用git log --date=short --pretty="format:%cd - %s" --name-status创建了一个详细的提交消息摘要,这至少给了我一个机会返回到这个条目并查看带有描述的消息。
但是,这对于文件删除是不起作用的,而且你也不知道哪个更改实际上属于巨大的提交消息的哪个部分。
mine)作为远程添加并获取其内容。然后我检出了一个新分支到mine的主分支:
git checkout -b new mine/master
因此,我可以从这个分支访问我单独存储库的所有历史记录。接下来,我使用递归合并策略将更新后的主分支合并到我的分支中,但对于冲突情况,我们(新的更改)优先考虑:
git merge master -s recursive -Xours
这将自动合并所有内容,如果存在冲突,则会通过使用我们的版本来解决冲突,从而有效地放弃主分支中的更改。
因此,您应该最终获得一个合并的分支,并且两个存储库的所有历史记录仍然存在。
git log 作为最简单的例子;或者使用 gitk 在图形浏览器中查看。 - pokegit log -- <path> 命令查看单个文件的历史记录(即影响该文件的全局历史的部分)。此外,请注意 Git 不跟踪单个文件,而总是在提交时跟踪整个存储库的内容,因此从技术上讲,Git 没有单独的文件。 - poke如果我理解正确,您的情况是这样的:
remote repo:
A - B
your repo
C - D - E - F
其中提交 A 实际上与 C 相同,提交 B 与 D 相同(就包含的文件而言)。我相信可能有效的方法就是在最新的远程提交上进行简单的变基工作,比如:
git rebase --onto B D
这应该将您的提交从 D 到您的 HEAD(例如 F),并将它们作为补丁应用于 B,从而产生以下结果:
A - B - E' - F'
这样,您的本地更改应该与此相同,并且可以轻松地推送到远程存储库。
rebase 的参数应该是第一个不想包含的提交。我认为在上面的图表中, myfeaturebranch 应该指向提交 F,但你想要的是它的祖先—— D(对应于 newgitrepo/master,或图表中的 B)。 - chegit -am "Catch up with SVN")。现在我感到很抱歉,但当时git只是在中间起到了一些作用。:( - Stefan Hoth
mine存储库的分支mine-master,然后(2)运行git rebase master mine-master将mine的工作重放在master中保留的工作之上。 - JJD