我想用git尝试一些事情,我不想在工作存储库中搞砸任何东西。
为了保证安全,我已经制作了一份我工作的裸仓库以及来自这个仓库的副本我打算做我所有的推动和标记。我用过:
cp --preseve -r original.git copy_of_original.git
虽然我理解可以撤消糟糕的提交和诸如此类的东西,但是我不想让所有这些恢复提交的回购,我也不想做任何重构,因此我希望从一个重复的裸存储库中工作
问题是,我执行以下操作:
git diff --name-only master@{"5 day ago"} master
然后回来:
warning: Log for 'master' only goes back to Fri, 15 Feb 2013 20:42:43 -0500.
我不想触摸的原始回购确实包含自5天前修改过的文件。
如果我在我复制的回购邮件上执行git log
,那么这5天的更改记录仍然存在。
这里发生了什么?
有没有更好的方法来制作存储库的独立副本?
更新1
我意识到我的问题不精确。我跑了:
git diff --name-only master@{"5 day ago"}
在目录中生成:
git clone copy_of_original.git clone_of_copy
答案 0 :(得分:1)
@{5 days ago}
语法依赖于来自reflog的信息
在下面引用的git-rev-parse文档部分中进行了解释。
Reflog是存储库的本地存储,并且永远不会通过clone,fetch或
推。这不是git log
显示的信息,除非-g
或。{1}}
使用了--walk-reflogs
选项。
裸存储库通常不会保留reflog,因此存储库的副本 也不会有这些信息。
<refname>@{<date>}, e.g. master@{yesterday}, HEAD@{5 minutes ago}
A ref followed by the suffix @ with a date specification enclosed in a brace pair
(e.g. {yesterday}, {1 month 2 weeks 3 days 1 hour 1 second ago} or {1979-02-26
18:30:00}) specifies the value of the ref at a prior point in time. This suffix may
only be used immediately following a ref name and the ref must have an existing log
($GIT_DIR/logs/<ref>). Note that this looks up the state of your local ref at a
given time; e.g., what was in your local master branch last week. If you want to
look at commits made during certain times, see --since and --until.
答案 1 :(得分:0)
每个克隆都包含.git目录中的存储库的完整副本(如果您有一个分支,master)。每个副本独立于其他副本,并通过本地提交或从其他存储库中提取时进行修改。
所以递归副本完全没问题。
至于您所看到的内容,您需要提供更多详细信息,以及更完整的命令列表。
答案 2 :(得分:0)
如果您克隆,则只复制部分内容,如果您 copy ,则您拥有相同版本的原始存储库。这适用于git
;可以备份和恢复等。