我使用 Git 很长时间了,但最近遇到了一个有趣的技巧,它允许您在合并期间恢复文件更改历史记录。以下是重现的步骤是:
我有两个文件和一个提交的 git 存储库:
$ git branch
* master
$ git log --oneline
80c8d5a Initial commit
$ git log --oneline -- README
80c8d5a Initial commit
$ ls
README conflict_file
我正在创建新的实验分支并更改 README 和 conflict_file 文件:
$ checkout -b experiment
Switched to branch 'experiment'
$ vim README
$ vim conflict_file
$ git commit -am "Experimental changes"
[experiment cdbc988] Experimental changes
2 files changed, 2 insertions(+)
$ git log --oneline -- README
cdbc988 Experimental changes
80c8d5a Initial commit
返回主分支并编辑冲突文件(在合并期间发生冲突):
$ git checkout master
Switched to branch 'master'
$ vim conflict_file
$ git commit -am "Master changes"
[master ad8b68e] Master changes
1 file changed, 1 insertion(+)
我的存储库的状态如下:
$ git log --oneline --decorate --graph --all
* ad8b68e (HEAD, master) Master changes
| * cdbc988 (experiment) Experimental changes
|/
* 80c8d5a Initial commit
尝试与实验分支合并:
$ git merge experiment
Auto-merging conflict_file
CONFLICT (content): Merge conflict in conflict_file
Automatic merge failed; fix conflicts and then commit the result.
$ git mergetool
<merging conflict in conflict_file>
这是诀窍:
$ git reset HEAD README
Unstaged changes after reset:
M README
$ git commit
[master 909139f] Merge branch 'experiment'
$ git log --oneline -- README
80c8d5a Initial commit
我丢失了在Experimental changes commit的实验分支中引入的README文件的更改和历史记录。任何人都可以评论它与 Git 知道所有更改的想法有什么关系吗?有可能避免这种情况吗?这可能会成为我们公司的一个问题,因为允许开发人员进行合并操作,但他们可能会意外删除某人的更改。