一个队友分支实现一个新函数并将其与主分支合并,然后其他人的版本覆盖了他的版本。
从那以后,我们在项目中增加了一些东西,不能只是恢复,但我们需要他的工作。
有没有办法与以前的版本合并?
基本上,如何在主分支中与早期版本合并?
您可以通过命令在合并之前获取文件内容
git cat-file -p COMMIT:PATH
然后从那里复制代码
只需使用git cherry-pick
:
git checkout master
git cherry-pick <old-commit-sha1>
这将重新应用该提交引入的更改到当前 HEAD。
如果分支有多个提交,您也可以在一个命令中挑选它们。
如果你知道 commitID(哈希代码(,那么它很简单。只需按照@VonC回答中的建议使用 git cherry-pick。您可以按照以下方法来实现它。
git fetch origin
--> 或者使用存储库名称更改源。git checkout -b newBranch
--> 为了安全起见,我正在创建一个新分支。git reset --hard origin/branchInServer
--> 现在新分支应该完全按原样更改 branchInServer。git log --pretty=format:"%h | %an | %ad | %s" --date=iso --graph -30
--> 打印分支中的最后 30 次提交,包括图形、日期、注释等。在这里它应该打印你朋友的提交和覆盖的提交(如果需要,更改 30(git branch | grep "^*"
--> 确保分支。
现在,只要认为这是您的输出。
* 1112 User1 "last commit in this branch"
* 2234 User2 "second last commit"
* 3344 User3 "OVERWRITTEN commit"
* 4455 User4 "some commit between"
* 0101 Friend1 "Friends commit"
* 5577 User5 "some commit before"
* 9911 User5 "some commit before"
如果这是您期望的输出,请执行以下操作。
git reset --hard 4455
(在覆盖之前重置为提交(
或
git reset --hard 9911
(重置为之前的任何提交并挑选 你的(git cherry-pick 0101
注意:
如果您不知道要输入多少计数才能获得带有朋友提交的 git 日志,请执行此操作。git log --pretty=format:"%h | %an | %ad | %s" --date=iso --graph | grep "Frend'sName"