相关疑难解决方法(0)

git移植和替换有何不同?(移植物现在已被弃用吗?)

有极少数的Q&A的上的git graftsreplace.搜索[git] + grafts + replace只发现了两个与5. what-are-git-info-grafts-forgit-what-a-a-graftcommit-or-a-graft-id相关的两个.git.wiki.kernel.org:GraftPoint上还有一个注释

被移植现在完全取代replacefilter-branch,或者他们仍然需要一些特殊的情况(和向后兼容)?

一般来说,它们如何不同(例如哪些在回购之间运输),它们通常是如何相同的?我已经看到Linus似乎并不关心目前在关于提交代数的讨论(最大父母回到任何根种类)的问题"移植已经不可靠了."

编辑:找到更多信息.
搜索www.kernel.org/pub/software/scm/git/docs graft仅找到3个结果:

  1. GIT-滤波器分支(1),
  2. v1.5.4.7/GIT-滤波器分支(1),
  3. v1.5.0.7/GIT-s​​vn的(1).

稍微宽泛的搜索发现RelNotes/1.6.5.txt包含:

  • refs/replace/hierarchy被设计为可用作"移植"机制的替代,其附加优势是它可以跨存储库传输.

不幸的是,gitrepository-layout(5)还没有更新refs/replace/repository布局信息(和注释),也没有任何信息/移植的弃用说明.

这更接近支持我的想法,但我欢迎任何确认或澄清.

git

53
推荐指数
3
解决办法
1万
查看次数

很难理解git-fetch

我很难理解git-fetch的细微差别.我知道做一个fetch,将远程refs提取到本地跟踪分支.

我有几个问题:

  1. 是否有可能本地跟踪分支不存在?如果是,那么它会自动创建吗?

  2. 如果我执行fetch并指定非跟踪分支作为目标,会发生什么?

  3. git-fetch的手册页指定:

    git-fetch <options> <repository> <refspec>
    
    Run Code Online (Sandbox Code Playgroud)

我如何使用refspec从远程主站获取内容到其远程跟踪分支?我相信如果我现在的HEAD在主人身上并且我跑了,这可能是可能的

git fetch origin master

但是,我可以使用<+?src:dest>refspec来实现同样的目的吗?我认为这将有助于我更好地理解这些概念.

还有一个问题:

我的.git/config文件有以下行用于获取(仅显示相关行):

fetch = +refs/heads/*:refs/remotes/origin/*
Run Code Online (Sandbox Code Playgroud)

有人可以解释这条线的确切含义吗?

git git-fetch

52
推荐指数
3
解决办法
3万
查看次数

为什么Git在运行"git checkout origin/<branch>"后告诉我"当前不在任何分支上"?

我试图按照Git的说明:"目前不在任何分支上." 有没有一种简单的方法可以回到分支上,同时保持变化?git checkout似乎被打破了:

$ git checkout origin/web-zach
HEAD is now at 1366cb1... Changed so css files not ignored

$ git status
# Not currently on any branch.
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       .cordova/config.xml
#       www/languages/pt/sounds/
nothing added to commit but untracked files present (use "git add" to track)
Run Code Online (Sandbox Code Playgroud)

更具体地说,我担心"目前没有任何分支"的消息.git checkout在这里似乎没有做任何事情......这个命令的全部目的不是把我放在树枝上吗?我怎样才能回到分支并再次提交/推送?

git remote-branch git-checkout

18
推荐指数
1
解决办法
3万
查看次数

如何将两个独立的无关Git存储库合并为一个具有单个历史时间轴的存储库

我有两个不相关的(不共享任何祖先签入)Git存储库,一个是超级存储库,它包含许多较小的项目(让我们称之为存储库A).另一个只是一个小型项目的临时本地Git存储库(让我们称之为存储库B).从图形上看,它看起来像这样

A0-B0-C0-D0-E0-F0-G0-HEAD (repo A)
A0-B0-C0-D0-E0-F0-G0-HEAD (remote/master bare repo pulled & pushed from repo A)
A1-B1-C1-D1-E1-HEAD (repo B)
Run Code Online (Sandbox Code Playgroud)

理想情况下,我真的想将回购B合并到一个历史时间轴的回购A. 所以看起来我最初是在repo A中开始投影.从图形上看,这将是理想的最终结果

A0-A1-B1-B0-D1-C0-D0-E0-F0-G0-E1-H(from repo B)-HEAD (new repo A)
A0-A1-B1-B0-D1-C0-D0-E0-F0-G0-E1-H(from repo B)-HEAD (remote/master bare repo pulled & pushed from repo A)
Run Code Online (Sandbox Code Playgroud)

我一直在用子模块和子树进行一些阅读(顺便说一句,Pro Git是一本非常好的书),但它们似乎都能解决维护两个独立分支的问题,子模块能够从上游和子树略微拉动少头痛.这两种解决方案都需要额外的专用git命令来处理主检查和主树和模块分支之间的同步和同步.这两种解决方案也会产生多个时间轴(使用子树时,使用--squash时,您甚至可以获得3个单独的时间轴).

来自SO的最接近的解决方案似乎是在谈论" 移植 ",但真的是吗?我的目标是拥有一个统一的存储库,我可以在其中拉/推入签到,这样就没有更多的回购B,最后只需回购A.

git git-merge

13
推荐指数
3
解决办法
8224
查看次数

如何推"git replace --graft"

我曾经git replace --graft记录过一个版本实际上是两个版本之间的(手动执行)合并:

 git replace --graft <merged-version> <predecessor-version> <version-merged-from>
Run Code Online (Sandbox Code Playgroud)

这改变了我的(本地,私有)存储库.

我现在想通过将其"推送"到我们的共享存储库(在Github上,这样就可以)将该更改提供给我的团队的其他成员.我怎么做?简单git push似乎没有效果.

git git-push

13
推荐指数
2
解决办法
1353
查看次数

如何在我在github.com上分叉的项目上重新播放本地Git存储库的提交?

是的,我知道我应该从一开始就分配项目,但这就是我现在所处的情况.:)

我有一个本地Git存储库,包含我的博客,在我的本地计算机上,有几个月的提交历史记录.最初,我只是从存储库http://github.com/mojombo/mojombo.github.com下载文件 ,然后我继续使用我的本地Git存储库,第一次提交看起来像mojombo存储库中的最新文件.

我现在想分叉项目并让我的本地Git存储库提交在它上面重放,所以看起来我从头开始分叉项目,然后将它推回到我的GitHub上的mojombo存储库的分叉版本帐户:

http://github.com/program247365/mojombo.github.com

所以历史可能会像这样:

mobjombo repository:         1---2---3----23
                                  \
my blog repository commits:       24---25---
Run Code Online (Sandbox Code Playgroud)

我可以使用哪些Git命令来完成此操作?

我看过这个问题.我是否必须将mojombo的存储库添加为我的项目的远程,然后将其拉入,合并,解决冲突,然后推送到我在GitHub上的分叉项目?

git github

10
推荐指数
2
解决办法
2161
查看次数

Git命令可以破坏/重写历史记录

你能提供一个(全部或最常见的)操作或命令列表,这些操作或命令会危害git中的历史记录吗?

什么应该绝对避免?

  1. 推送此提交后修改提交(git commit/ git push/ git commit --amend)
  2. 重新启动已经推动的东西

我希望这个问题(如果它还没有在其他地方之前提出过)成为关于git常见的可避免操作的某种参考.

此外,我使用git reset了很多,但我还没有完全意识到我可以对存储库(或其他贡献者副本)造成的损害.可能git reset有危险吗?

git github git-rewrite-history

6
推荐指数
3
解决办法
1472
查看次数

如何在不破坏文件历史记录的情况下组合多个Git存储库?

我们正试图远离TFS.使用git-tfs工具,我们能够迁移现有仓库的一部分,但在某些麻烦的签入时崩溃了.我们已经能够制作一套拼凑的Git repos,它涵盖了大多数原始TFS提交.

目前有:

  • Git回购从2009年到2011年的变化
  • Git repo从2011年到2016年的变化
  • Git回购从2016年到现在的变化

期望:

  • Big Git回购涵盖2009年至今
  • 任何存在于整个时间的文件都只有一个文件历史记录

我们有什么方法可以将它们拼接成一个Git仓库吗?我们不关心保留SHA(它们都是新的),但我们无法破坏文件历史记录.

git tfs git-tfs

6
推荐指数
1
解决办法
209
查看次数

从git到svn的挑选(或者,如何在git中保存项目历史并在svn中发布)

我是唯一一个使用git的人,其他人都在使用svn.我用'git svn'连接到团队svn,大多数情况下都可以.最近,我最初是在我自己的单独的git repo上开始了一个项目,现在我需要将其中的东西合并到svn中.但是,我仍然希望在发行版之间不断调整我自己的隐私实现.

那么,从我的私人仓库到svn-cloned仓库挑选一些提交的最直接的方法是什么?要求是保留完整的本地历史记录,并且每个选择只有一个svn提交.或者是否需要进行一些挤压?

作为实现这一目标的方法,有没有办法让私有仓库作为svn克隆仓库的另一个来源?

git workflow git-svn cherry-pick

5
推荐指数
1
解决办法
743
查看次数

将git存储库历史记录的一部分移动到另一个存储库中

这里有很多关于将文件夹从一个存储库移动到新存储库的帖子git filter-branch; 我需要做的是将单个文件移动到新的存储库中.

我已经创建了新的存储库,并将文件系统中的旧存储库添加为"远程",并创建了一个新的"根提交"(只需为新的单文件项目添加自述文件).现在我需要移植与此特定文件有关的提交到新的root-commit上.

(我应该提一下,这个文件在任何时候都没有像任何其他文件一样被修改;我怀疑这可能会使这个任务变得更容易.)

git merge repository

5
推荐指数
2
解决办法
1905
查看次数