[英]git-svn How can I merge changes from a local git repo to a different remote svn branch?
[英]Can I recover lost commits in a SVN repository using a local tracking git-svn branch?
我使用git-svn跟蹤的SVN repo最近被破壞並恢復了備份。 然而,在復蘇中失去了一周的承諾。 是否有可能在我的本地git repo上使用git-svn dcommit
恢復那些丟失的提交? 使用SVN中最后恢復的提交的SHA1運行git-svn dcommit
是否足夠? 例如。
> svn info http://tracked-svn/trunk | sed -n "s/Revision: //p"
252
> git log --grep="git-svn-id:.*@252" --format=oneline | cut -f1 -d" "
55bb5c9cbb5fe11a90ec2e9e1e0c7c502908cf9a
> git svn dcommit 55bb5c9cbb5fe11a90ec2e9e1e0c7c502908cf9a
或者git-svn-id
是否需要從預期的提交中刪除?
我嘗試使用--dry-run
但無法判斷它是否會嘗試提交所有提交:
> git svn dcommit --verbose --dry-run 55bb5c9cbb5fe11a90ec2e9e1e0c7c502908cf9a
Committing to http://tracked-svn/trunk ...
dcommitted on a detached HEAD because you gave a revision argument.
The rewritten commit is: 55bb5c9cbb5fe11a90ec2e9e1e0c7c502908cf9a
謝謝你的幫助。
以下是我實現我想要的方式:
http://tracked-svn/trunk
。 git remote add -f up-to-date /path/to/repo
) git merge remotes/up-to-date/master
git svn dcommit
重新使用我的舊回購沒有錯誤,並且dcommit按預期工作。
這可能不是恢復提交的最佳方法,但它讓我得到了我想要的東西。
不是一個完整的答案,但該線程可能會解釋一下錯誤信息:
'
git svn dcommit
'采用可選的修訂版本參數,但它的含義相當可怕。
它完全忽略了HEAD
的當前狀態,只關注SVN和$rev
之間的$rev
。
如果HEAD附加到$ branch,則分支在此過程中丟失所有提交$ rev .. $ branch。考慮到'
git svn dcommit HEAD^
'具有直觀含義“dcommit
除了最后一個之外我的分支上的所有更改”,我們更改了修訂參數的含義。
git-svn暫時檢查$rev
的工作,這意味着:
- 如果指定了分支,則該分支( 不是
HEAD
)作為dcommit的一部分進行dcommit
,- 如果指定了其他一些修訂,如示例所示,所有工作都在分離的HEAD上進行,並且不會影響任何分支。
我不確定該補丁是否已經集成在Git版本中,但是如果你測試你的dcommit,請確保在dcommit
之后git branch -b
,用一個分支引用當前的HEAD。
它會在SVN端工作嗎? 我不知道。
我發現這篇文章揭示了detached_head
情況 。
我一直在處理或多或少相同的問題,這就是我最終做的事情:
git branch
(no branch)
(帶星號表示“當前分支”),這意味着你有一個分離的頭 git co -b [BRANCH NAME] --track
。 使用--track
選項, 我認為它跟蹤git-svn
HEAD,因此將這個新分支重新附加到HEAD。 git svn rebase/dcommit
命令。 這可能很糟糕,但這似乎也有所幫助 - 我刪除了master
分支,然后在執行git svn rebase
,它似乎自動添加回master
分支。
此外,我查看了一個文件的日志,似乎一旦我做了一個git svn dcommit
,所有的git git svn dcommit
都是完整的,從我的分支開始變得瘋狂,我正在盡我所能讓它正確地恢復。
我不是100%肯定這是完全正確的,但我似乎對我有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.