>  기사  >  개발 도구  >  Git은 병합 실행 취소를 구현하고 병합된 로컬 파일을 지웁니다.

Git은 병합 실행 취소를 구현하고 병합된 로컬 파일을 지웁니다.

coldplay.xixi
coldplay.xixi앞으로
2020-12-10 17:29:396216검색

git tutorialcolumn에서는 merge를 지우는 방법을 소개합니다

Git은 병합 실행 취소를 구현하고 병합된 로컬 파일을 지웁니다.

권장: git tutorial

1 바로 요점

해결책
방법 1: git Reset --merge 이전 커밋 merge 해시 문자열git reset --merge merge前的任何一次提交的hash串
注1

  • 如果工作区在merge之后没有任何改动,大胆的用此方法。
  • 如果工作区在merge之后有了改动,那么此方法会重置工作区的一切修改,慎用。但是会保留暂存区的改动。

注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 加入暂存区

三、撤销 merge

开发者一号面临的情况:本地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은 병합 실행 취소를 구현하고 병합된 로컬 파일을 지웁니다.

  • 查看提交历史 git log --oneline --graph

    Git은 병합 실행 취소를 구현하고 병합된 로컬 파일을 지웁니다.


验证法一
  • 撤回 merge git reset --merge 7f811bf 或执行git reset --merge HEAD^
    HEAD^此例中是7f811bf,上面提交历史可看到7f811bf就是merge前提交的hash串

  • 查看本地文件 ls 并查看文件内容

    Git은 병합 실행 취소를 구현하고 병합된 로컬 파일을 지웁니다.

  • 再次查看提交记录 git log --oneline --graph

    Git은 병합 실행 취소를 구현하고 병합된 로컬 파일을 지웁니다.

  • 查看

    • 工作区和暂存区的区别 git diff
    • 工作区和版本库的区别 git diff HEAD
    • 暂存区和版本库的区别 git diff --cached

      Git은 병합 실행 취소를 구현하고 병합된 로컬 파일을 지웁니다.

最终结果: 本地文件改动都被重置了(即开发者一号merge后增加的--余虽好修姱以鞿羁兮, 謇朝谇而夕替,被删除了),但暂存区还有内容。故工作区merge 后有改动慎用


验证法二
  • 撤回 merge git reset 7f811bf

  • 再次查看当前本地文件 ls

Git은 병합 실행 취소를 구현하고 병합된 로컬 파일을 지웁니다.

  • 再次查看提交记录 git log --oneline --graph

    Git은 병합 실행 취소를 구현하고 병합된 로컬 파일을 지웁니다.

阶段结果:很明显可以看到,merge已经回滚了,但是本地合并过来的文件依然还在。还要将多余合并的文件(Suffer.txt)删除。

  • 在删除之前可以先看看执行删除操作会删掉那些内容(预删除git clean -n
  • 참고 1
:

  • 병합 후에도 작업 공간이 변경되지 않은 경우 이 방법을 과감하게 사용하세요. Git은 병합 실행 취소를 구현하고 병합된 로컬 파일을 지웁니다.
  • 병합 후 작업 공간이 수정되면 이 방법은 작업 공간에 대한 모든 수정 사항을 재설정하므로
    주의해서 사용하세요. 그러나 준비 영역의 변경 사항은 유지됩니다. 🎜🎜🎜🎜참고 2: 🎜MERGE_HEAD가 현재 커밋에 있는 경우(즉, 브랜치를 병합할 때 오류나 충돌이 발생하면 브랜치 옆에 추가 "|MERGING"이 표시됩니다) git merge - -abort 이 방법과 동일 🎜방법 2: 🎜<pre class="brush:php;toolbar:false">echo test.txt &gt; .gitignore git add .gitignore git clean -n</pre>🎜 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
    🎜🎜 🎜🎜🎜f49ac50916c1b7d766a7878d480f6da.p ng🎜🎜
    • 제출 내역 보기 자식 로그 --oneline --graph🎜🎜Git은 병합 실행 취소를 구현하고 병합된 로컬 파일을 지웁니다.🎜🎜🎜🎜
      확인 방법 1
      • 🎜Withdraw mer gegit Reset --merge 7f811bf 또는 실행 git Reset --merge HEAD^🎜HEAD^ 이 예에서는 7f811bf입니다. 위의 제출 기록에서 7f811bf가 병합 전에 제출된 해시 문자열임을 알 수 있습니다. 로컬 파일 ls 및 파일 내용 보기🎜

        Git은 병합 실행 취소를 구현하고 병합된 로컬 파일을 지웁니다.🎜🎜🎜

      • 🎜 커밋 기록 다시 보기 git log --oneline --graph🎜🎜🎜Git은 병합 실행 취소를 구현하고 병합된 로컬 파일을 지웁니다.🎜🎜🎜
      • 🎜View🎜
        • 작업공간과 스테이징 영역의 차이점git diff🎜
        • 작업공간과 저장소의 차이점git diff HEAD🎜
        • 스테이징 영역과 저장소의 차이점git diff --cached🎜🎜Git은 병합 실행 취소를 구현하고 병합된 로컬 파일을 지웁니다.🎜🎜🎜 🎜🎜🎜🎜🎜최종 결과 : 🎜 모든 로컬 파일 변경 사항이 재설정되었으나(즉, 병합 후 1번 개발자가 추가한 것 - 수정하기 쉬웠으나 하룻밤 사이에 교체되어 삭제됨) 임시 저장 공간이 그대로 남아 있습니다. 콘텐츠. 따라서 작업공간에 병합 후 변경사항이 있으므로 주의해서 사용하세요. 🎜현재 로컬 파일을 다시 확인하세요. ls🎜🎜🎜🎜🎜Git은 병합 실행 취소를 구현하고 병합된 로컬 파일을 지웁니다.🎜🎜
          • 🎜커밋 기록 다시 보기 git 로그 --oneline --graph🎜🎜🎜Git은 병합 실행 취소를 구현하고 병합된 로컬 파일을 지웁니다.🎜🎜🎜🎜 🎜🎜단계 결과:🎜 병합이 롤백되었지만 로컬로 병합된 파일은 여전히 ​​남아 있습니다. 중복된 병합 파일(Suffer.txt)도 삭제하세요. 🎜
            • 삭제하기 전에 삭제 작업(🎜pre-deletion🎜)을 수행하면 어떤 콘텐츠가 삭제될지 먼저 확인할 수 있습니다. git clean -n🎜🎜🎜🎜🎜🎜
              • 注意:这里看到本地原来的文件 test.txt 也将被删除,这不是我所期望的。我只希望可以删除 meger 的文件。

              • 将 test.txt 文件加入 .gitignore 再执行预删除

              echo test.txt > .gitignore
              git add .gitignore
              git clean -n

              Git은 병합 실행 취소를 구현하고 병합된 로컬 파일을 지웁니다.

              阶段结果:可以看到将会被删除的文件只剩下 merge 的多余文件了。

              • 执行 删除操作 git clean -f
              • 最终结果

위 내용은 Git은 병합 실행 취소를 구현하고 병합된 로컬 파일을 지웁니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 jianshu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제