해결책
방법 1: git Reset --merge 이전 커밋 merge 해시 문자열
git reset --merge merge前的任何一次提交的hash串
注1:
注2:当MERGE_HEAD 在当前的提交上的时候 (就是当合并分支时遇到错误或者冲突,分支旁边会多出“|MERGING”这个东西)git merge --abort
与此方法一样
法二:
git reset merge前的任何一次提交的hash串 git clean -n #预删除 #将预删除不想删除的文件加入.gitignore git add .gitignore git clean -f
约定:远程仓库 URL 使用 remote url
代替
1、模拟开发者一号
mkdir gitTest #新增文件夹gitTest cd gitTest git init git remote add origin "remote url" echo "长太息以掩涕兮, 哀民生之多艰。" > lyrics.txt #新建 lyrics.txt 并在里面写入文字 git add lyrics.txt #将 lyrics.txt加入暂存区 git commit -m "lyrics.txt from user 1" git push origin master git checkout -b dev git push origin dev:dev
2、模拟开发者二号
mkdir gitTest2 cd gitTest2 git clone "remote url" cd gitTest echo "Don't make me suffer" > Suffer.txt git add Suffer.txt git commit -m "Suffer.txt from user2" git push origin dev
3、模拟开发者一号
git checkout master git merge origin/dev #合并远程dev分支 echo "余虽好修姱以鞿羁兮, 謇朝谇而夕替。" >> lyrics.txt #修改文件 lyrics.txt echo "余虽好修姱以鞿羁兮, 謇朝谇而夕替。" > test.txt #新建test并写入内容 git add test.txt #将 test.txt 加入暂存区
开发者一号面临的情况:本地master合并了远程dev的内容,本地多了一个Suffer.txt的文件。但是发现合错了分支,要撤销刚刚的合并操作。但是本地文件又有改动。
查看当前本地文件 ls
<img src="https://img.php.cn/upload/image/270/754/732/1607592020999359.png" title="1607592020999359.png" alt="Git은 병합 실행 취소를 구현하고 병합된 로컬 파일을 지웁니다.">
查看工作区和版本库的区别 git diff HEAD
git log --oneline --graph
撤回 merge git reset --merge 7f811bf
或执行git reset --merge HEAD^
HEAD^此例中是7f811bf,上面提交历史可看到7f811bf就是merge前提交的hash串
查看本地文件 ls
并查看文件内容
再次查看提交记录 git log --oneline --graph
查看
git diff
git diff HEAD
git diff --cached
最终结果: 本地文件改动都被重置了(即开发者一号merge后增加的--余虽好修姱以鞿羁兮, 謇朝谇而夕替,被删除了),但暂存区还有内容。故工作区merge 后有改动慎用
撤回 merge git reset 7f811bf
再次查看当前本地文件 ls
再次查看提交记录 git log --oneline --graph
阶段结果:很明显可以看到,merge已经回滚了,但是本地合并过来的文件依然还在。还要将多余合并的文件(Suffer.txt)删除。
git clean -n
git merge - -abort 이 방법과 동일 🎜방법 2: 🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">echo test.txt > .gitignore
git add .gitignore
git clean -n</pre><div class="contentsignin">로그인 후 복사</div></div><div class="contentsignin">로그인 후 복사</div></div>🎜 2. 환경 구성 🎜🎜<em>규칙: </em>원격 창고 URL 대신 <code>원격 URL
사용 🎜🎜1 .시뮬레이트 개발자 No.1🎜🎜rrreee🎜🎜2. 시뮬레이션 개발자 No.2🎜🎜rrreee🎜🎜3. 시뮬레이션 개발자 No.1🎜🎜rrreee🎜3. 개발자 No.1이 직면한 상황🎜 : 로컬 마스터가 병합됩니다. 원격 개발의 콘텐츠에는 로컬에 추가 Suffer.txt 파일이 있습니다. 그러나 잘못된 브랜치가 병합된 것으로 확인되어 방금 병합 작업을 취소해야 했습니다. 그러나 로컬 파일에는 변경 사항이 있습니다. 🎜ls
🎜🎜<img src="https://img.php.cn/upload/image/270/754/732%20/%20160759209999359.png%20" title=" 1607592020999359.png " alt="E72AE239E653BEF7482D64C93EF8AB3.png ">
> Git Diff Head 자식 로그 --oneline --graph
🎜🎜🎜🎜🎜🎜git Reset --merge 7f811bf
또는 실행 git Reset --merge HEAD^
🎜HEAD^ 이 예에서는 7f811bf입니다. 위의 제출 기록에서 7f811bf가 병합 전에 제출된 해시 문자열임을 알 수 있습니다. 로컬 파일 ls
및 파일 내용 보기🎜🎜🎜🎜
git log --oneline --graph
🎜🎜🎜🎜🎜🎜git diff
🎜 git diff HEAD
🎜git diff --cached
🎜🎜🎜🎜🎜 🎜🎜🎜🎜🎜최종 결과 : 🎜 모든 로컬 파일 변경 사항이 재설정되었으나(즉, 병합 후 1번 개발자가 추가한 것 - 수정하기 쉬웠으나 하룻밤 사이에 교체되어 삭제됨) 임시 저장 공간이 그대로 남아 있습니다. 콘텐츠. 따라서 작업공간에 병합 후 변경사항이 있으므로 주의해서 사용하세요. 🎜현재 로컬 파일을 다시 확인하세요. ls
🎜🎜🎜🎜🎜🎜🎜git clean -n
🎜🎜🎜🎜🎜🎜注意:这里看到本地原来的文件 test.txt 也将被删除,这不是我所期望的。我只希望可以删除 meger 的文件。
将 test.txt 文件加入 .gitignore 再执行预删除
echo test.txt > .gitignore git add .gitignore git clean -n
阶段结果:可以看到将会被删除的文件只剩下 merge 的多余文件了。
git clean -f
위 내용은 Git은 병합 실행 취소를 구현하고 병합된 로컬 파일을 지웁니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!