美文网首页
如何把commit从一个repos拷贝到另一个repos

如何把commit从一个repos拷贝到另一个repos

作者: CodingCode | 来源:发表于2021-10-23 01:11 被阅读0次

    有两种方法

    假设源repos: source_repos,目的repos: target_repos

    1. 使用format-patch
    • Step 1: 进到源source_repos的git根目录

    使用git log找出待拷贝的commit。

    • Step 2: 导出commit内容
    $ git format-patch <commit>~..<commit>
    

    会在当前目录下面生成一个0001_XXX.patch文件。这是一个patch diff文件,可以打开看。

    • Step 3: 修改0001_XXX.patch里面相关文件的路径(可选)

    如果源source_repos和target_repos中文件的路径发生了变化,那么要手动修改.patch文件里面的相关文件路径。

    举例来说,如果文件 common.c文件在源source_repos的路径是 src/common/common.c,而在目的target_repos的路径变成了src/utility/common.c,那么:

    前面一步生成的.patch文件会包含:

    ...
    diff --git a/src/common/common.c b/src/common/common.c
    index c503614..b237157 100755
    --- a/src/common/common.c
    +++ b/src/common/common.c
    @@ -597,6 +597,10 @@
    ...
    ...
    

    于是这个patch文件在目的target_repos上是打不了的,因为目的target_repos上没有src/common/common.c这个文件;所以此时就要手动修改这个文件内容,把文件路径进行调整:

    ...
    diff --git a/src/utility/common.c b/src/utility/common.c
    index c503614..b237157 100755
    --- a/src/utility/common.c
    +++ b/src/utility/common.c
    @@ -597,6 +597,10 @@
    ...
    
    • Step 4: 在目的target_repos里面打上这个patch

    显示进到目的target_repos的git根目录,有两个命令可以。

    4.1: $ git am path/to/patch.patch
    这个命令直接提交patch文件,即完成commit操作,用户只需要在push到server端就完成了。

    如果命令失败了,可以使用$ git am --abort丢弃,重新来打。

    4.2:$ git apply path/to/patch.patch
    相比前面的命令,用这个命令不会提交,所有的文件改动保存在checkout状态,需要用户手动commit,然后push。

    • Step 5:验证改动的内容

    验证commit的源source_repos上的commit内容一样,用户需要使用git命令查看改动是否是正确的,例如git show <commit>

    1. 使用cherry-pick
    • Step 1: 进到目的target_repos的git根目录
    • Step 2: 增加源source_repos作为remote_repos
    $ git remote add [-t <branch>] <source-repos-name> <url_of_source_repos>
    

    例如$ git remote add myremoterepos https://github.com/path/to/oldrepo

    注意:这里如果指定了-t <branch>,那么再后面第三步获取源source_repos上的所有commit记录的时候只会获取此<branch>上的历史记录。

    然后可以使用命令查看remote repository的信息:

    $ git remote show
    $ git remote show <myremoterepos>
    
    • Step 3: 获取源source_repos上的所有commit记录
    $ git fetch <myremoterepos>
    or
    $ git remote update [<myremoterepos>]
    
    • Step 4: 列出源source_repos上的commit列表
    $ git log <myremoterepos>/<source-branch-name> 
    
    • Step 5: pickup需要的commit
    $ git cherry-pick <commit1>
    $ git cherry-pick <commit2>
    ...
    
    • Step 6: push到server端
    $ git push -u origin <branch>
    
    • Step 7: 删除remote_repos
    $ git remote remove <myremoterepos>
    

    相关文章

      网友评论

          本文标题:如何把commit从一个repos拷贝到另一个repos

          本文链接:https://www.haomeiwen.com/subject/jaqkaltx.html