고의로 git에 충돌을 일으키다

7840 단어 GitWindows8

고의로 git에 충돌을 일으키다


개요


git의 학습 중 하나로서 나는 고의로 충돌을 일으키는 프로그램을 배우고 싶다.

컨디션


Git 2.13.1
Windows8
Bitbucket

디테일


이번에 우리는 두 개의 현지 창고를 제작하여 각각 테스트 A 지점, 테스트 B 지점을 만들었다.
만들어서 진행하고 싶어요.

충돌이 발생한 파일을 원격 창고로 복사


로컬 테스트 A 지점을 사용하여 충돌을 일으킨 파일을 원격 창고로 복사합니다.
우선 서류 제작부터 시작한다.
command(testa 분기)
touch test{1..10}.txt
ls
명령 프롬프트 표시(test A 분기)
test1.txt   test2.txt  test4.txt  test6.txt  test8.txt
test10.txt  test3.txt  test5.txt  test7.txt  test9.txt
이 파일들을push로 하기 때문에dd에서commiit를 진행해야 합니다.
command(testa 분기)
git add .
git commit -m testファイルを大量に追加
git log -n1
명령 프롬프트 표시(test A 분기)
commit a78cdfde3bc11fb69de3e40760f6018722a5a582 (HEAD -> testA)
Author: kashiwara <------------>
Date:   Sun Oct 8 13:04:24 2017 +0900

    testファイルを大量に追加
commiit 나왔으니 push 해 주세요.
command(testa 분기)
git push origin testA
비트bucket(원격)에는push의testA 분기가 있기 때문에 통합됩니다.

따라서 기본 파일은 원격 창고의 마스터에 통합되었습니다.

테스트 B 분기로 파일 가져오기


다음은testB지점에서pull이방금testA지점과합병한master지점을원합니다.
command(testB 분기)
git pull origin master
명령 프롬프트 표시(testB 분기)
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 4 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (4/4), done.
From -----------------
 * branch            master     -> FETCH_HEAD
   7c1b2da..140f412  master     -> origin/master
Merge made by the 'recursive' strategy.
 test1.txt  | 0
 test10.txt | 0
 test2.txt  | 0
 test3.txt  | 0
 test4.txt  | 0
 test5.txt  | 0
 test6.txt  | 0
 test7.txt  | 0
 test8.txt  | 0
 test9.txt  | 0
 10 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test1.txt
 create mode 100644 test10.txt
 create mode 100644 test2.txt
 create mode 100644 test3.txt
 create mode 100644 test4.txt
 create mode 100644 test5.txt
 create mode 100644 test6.txt
 create mode 100644 test7.txt
 create mode 100644 test8.txt
 create mode 100644 test9.txt

이렇게 되면 테스트 A 지점과 테스트 B 지점은 완전히 같은 파일을 가진 상황이 된다.

각 지점을 변경한 후commiit 진행


테스트 A 지점을 변경합니다.
command(testa 분기)
echo "oeiua" > test1.txt
echo "あ" > test2.txt
rm -rf test4.txt
test1.txt에서 oeuia,test2를 입력합니다.txt에 텍스트를 입력한 후 남기고test4를 삭제합니다.
내가 dd 이거 변경해서 commiit 진행할게.
command(testa 분기)
git add .
git commit -m test1-2.txtを書き換えtest4.txtを消した
git log -n1
명령 프롬프트의 출력(testa 분기)
commit 2db675eefb2623f4332cf3fbfab270c6bf80adf3 (HEAD -> testA)
Author: kashiwara <------------>
Date:   Sun Oct 8 13:56:24 2017 +0900

    test1-2.txtを書き換えtest4.txtを消した

다음은 테스트 B 지점을 변경합니다.
command(testB 분기)
echo "aiueo" > test1.txt
rm -rf test{2..4}.txt
test1.txt에 aiueo,test2를 입력하세요.txt에서test4까지.txt가 삭제되었습니다.
내가 dd 이거 변경해서 commiit 진행할게.
command(testB 분기)
git add .
git commit -m test1.txtを書き換えtest2-4.txtを消した
git log -n1
명령 프롬프트 표시(testB 분기)
commit 3c1b2ce408b915d630255a9bf065333c6e951f07 (HEAD -> testB)
Author: kashiwara <------------>
Date:   Sun Oct 8 13:36:17 2017 +0900

    test1.txtを書き換えtest2-4.txtを消した

그렇다면 합의를 위해 준비를 마쳤다.

충돌이 일어나다


테스트 A 지점의push가 변경되었습니다
명령 프롬프트 표시(test A 분기)
git push origin testA
아까처럼 원격으로 합병해.

테스트 B 지점pull 변경으로 충돌을 일으키고 싶습니다.
command(testB 분기)
git pull origin master
그리하여충돌이 일어났다!!
git status 명령을 클릭하여 확인해 보세요.
command(testB 분기)
git status
명령 프롬프트 표시(testB 분기)
On branch testB
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add/rm <file>..." as appropriate to mark resolution)

        both modified:   test1.txt
        deleted by us:   test2.txt

no changes added to commit (use "git add" and/or "git commit -a")
both modified: 편집 내용에 따른 충돌
자체 분기(testB 분기)로 삭제된 파일이 충돌합니다.
라는 뜻이다.
이런 충돌을 해결합시다.

충돌 해결


충돌하는 테스트 1.cat 명령으로 txt를 보십시오.
command(testB 분기)
cat test1.txt
명령 프롬프트 표시(testB 분기)
<<<<<<< HEAD
aiueo
=======
oeuia
>>>>>>> 709ad198fbeb86aa3e3f903ab55f73dc19f71fbc
vim을 사용하여 aiueo만 저장합니다.
command(testB 분기)
vi test1.txt
이렇게 하면 편집 내용으로 인한 충돌이 해결된다.
이어서 파일 삭제로 인한 충돌을 해결합니다.
이번,test2.txt를 남기고 싶습니다.
나머지는 정상적으로dd.(new file로 추가됨)
command(testB 분기)
git add .
git status
command(testB 분기)
On branch testB
All conflicts fixed but you are still merging.
  (use "git commit" to conclude merge)

Changes to be committed:

        new file:   test2.txt
이 정도면 됐어.
command(testB 분기)
git commit -m "コンフリクトをなおした"
git log -n1
명령 프롬프트 표시(testB 분기)
commit 565196b735da345df82a5f0a6b005534ad054917 (HEAD -> testB)
Merge: 3c1b2ce 709ad19
Author: kashiwara  <------------>
Date:   Sun Oct 8 14:35:13 2017 +0900

    コンフリクトをなおした

충돌을 수정하여commiit를 진행할 수 있습니다.
그게 다야.

좋은 웹페이지 즐겨찾기