我正在使用一个git存储库,该存储库需要来自另一个不了解任何内容的git存储库的提交。
通常,我会HEAD@{x}
在reflog中使用来进行选择,但是由于对此.git
reflog条目(不同的物理目录)一无所知,我该如何选择它?
我正在使用git-svn
。我的第一个分支使用git-svn
的trunk
一个颠覆回购,而下一个分支是在git-svn
上一个Subversion分支。
我正在使用一个git存储库,该存储库需要来自另一个不了解任何内容的git存储库的提交。
通常,我会HEAD@{x}
在reflog中使用来进行选择,但是由于对此.git
reflog条目(不同的物理目录)一无所知,我该如何选择它?
我正在使用git-svn
。我的第一个分支使用git-svn
的trunk
一个颠覆回购,而下一个分支是在git-svn
上一个Subversion分支。
Answers:
您需要将另一个存储库添加为远程存储库,然后获取其更改。从那里您可以看到提交,并且可以对其进行挑选。
像那样:
git remote add other https://example.link/repository.git
git fetch other
现在,您拥有所有要做的信息git cherry-pick
。
有关在此处使用遥控器的更多信息:https : //git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes
--stdlayout
如果在Subversion中使用标准的主干/分支/标签布局,还请确保使用git-svn选项。那么Subversion分支将仅仅是一个远程git分支。
git am < d821j8djd2dj812.patch
。在GH之外,可以按照以下替代答案中的说明进行类似的操作。
给出的答案是使用format-patch,但是由于问题是如何从另一个文件夹中挑选,下面是一段代码来做到这一点:
$ git --git-dir=../<some_other_repo>/.git \
format-patch -k -1 --stdout <commit SHA> | \
git am -3 -k
(来自@cong ma的解释)
该
git format-patch
命令some_other_repo
从其SHA指定的提交中创建补丁(仅-1
用于一次提交)。该修补程序通过管道传输到git am
,该修补程序在本地应用该修补程序(这-3
意味着如果该修补程序无法干净地应用,请尝试三路合并)。希望能解释。
git format-patch
命令some_other_repo
根据其SHA指定的提交(仅-1
用于一次提交)创建补丁。该修补程序通过管道传输到git am
,该修补程序在本地应用该修补程序(这-3
意味着如果该修补程序无法干净地应用,请尝试三路合并)。希望能解释。
--ignore-whitespace
。完整命令: git --git-dir=../<some_other_repo>/.git format-patch -k -1 --stdout <commit SHA> | git am -3 -k --ignore-whitespace
这是远程获取合并的示例。
cd /home/you/projectA
git remote add projectB /home/you/projectB
git fetch projectB
那么你也能:
git cherry-pick <first_commit>..<last_commit>
或者你甚至可以合并整个分支
git merge projectB/master
git merge projectB/master
是非常,非常错误的,因为你没有应用从单一的更改提交(如摘樱桃会),你实际上是在合并的所有变化中projectB/master
未包含在自己的master
分公司。
git remote rm projectB
。也可git tag -d tag-name
用于删除从远程仓库获取的所有标签。远程提交将不再显示在您的历史记录中,并且修剪将最终从存储中删除它们。
您可以做到,但是需要两个步骤。就是这样:
git fetch <remote-git-url> <branch> && git cherry-pick FETCH_HEAD
替换<remote-git-url>
为您要从中选择的存储库的URL或路径。
替换<branch>
为要从远程存储库中挑选的分支或标记名称。
您可以FETCH_HEAD
从分支中替换为git SHA。
更新:根据@pkalinow的反馈进行了修改。
git fetch <repo-url> <branch> && git cherry-pick <sha>
。
以下是添加远程,获取分支和挑选提交的步骤
# Cloning our fork
$ git clone git@github.com:ifad/rest-client.git
# Adding (as "endel") the repo from we want to cherry-pick
$ git remote add endel git://github.com/endel/rest-client.git
# Fetch their branches
$ git fetch endel
# List their commits
$ git log endel/master
# Cherry-pick the commit we need
$ git cherry-pick 97fedac
资料来源:https : //coderwall.com/p/sgpksw
请参阅如何使用Git创建和应用补丁。(从您的问题的措辞中,我假设该其他存储库用于完全不同的代码库。如果它是同一代码库的存储库,则应按照@CharlesB的建议将其添加为远程存储。即使它用于另一个代码库,我想您仍然可以将其添加为远程数据库,但是您可能不想将整个分支添加到存储库中...)
我的情况是,我有一个空缺的存储库,该团队将其推送到该存储库中,并且旁边有一个克隆存储库。Makefile中的这组线对我来说正常工作:
git reset --hard
git remote update --prune
git pull --rebase --all
git cherry-pick -n remotes/origin/$(BRANCH)
通过使裸仓库的母版保持最新状态,我们可以挑选发布到裸仓库的建议更改。我们也有一种(更复杂的方法)选择多个分支进行合并的审查和测试。
如果“一无所知”的意思是“不能用作遥控器”,那么这没有帮助,但是由于我一直在搜寻该工作流程,所以出现了这样的SO问题,所以我想我会有所贡献。
如果要在给定提交之前选择多个给定文件的提交,请使用以下命令。
# Directory from which to cherry-pick
GIT_DIR=...
# Pick changes only for this file
FILE_PATH=...
# Apply changes from this commit
FIST_COMMIT=master
# Apply changes until you reach this commit
LAST_COMMIT=...
for sha in $(git --git-dir=$GIT_DIR log --reverse --topo-order --format=%H $LAST_COMMIT_SHA..master -- $FILE_PATH ) ; do
git --git-dir=$GIT_DIR format-patch -k -1 --stdout $sha -- $FILE_PATH |
git am -3 -k
done