GIT의 다른 지점에서 변경 사항을 선택적으로 병합하거나 선택하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/449541

문제

저는 두 가지 병렬 (현재 실험적인 개발 지점을 가진 새로운 프로젝트에서 GIT를 사용하고 있습니다.

  • master: 기존 Codebase와 몇 가지 모드 가져 오기가 일반적으로 확신합니다.
  • exp1: 실험 분기 #1
  • exp2: 실험 분기 #2

exp1 그리고 exp2 매우 다른 두 가지 건축 접근법을 나타냅니다. 내가 더 나아질 때까지 나는 어느 쪽이 작동하는지 알 수있는 방법이 없습니다. 한 가지에서 진전을 이루면서 때때로 다른 지점에서 유용한 편집물이 있고 그와 합쳐지고 싶습니다.

다른 모든 것을 떠나면서 한 개발 지점에서 다른 개발 지점으로 선택적 변경을 병합하는 가장 좋은 방법은 무엇입니까?

내가 고려한 접근법 :

  1. git merge --no-commit 그 후 지점 사이에서 공통적으로 만들고 싶지 않은 수많은 편집물을 무시하지 않습니다.

  2. 공통 파일을 임시 디렉토리로 수동으로 복사 한 다음 git checkout 다른 지점으로 이동 한 다음 온도 디렉토리에서 작업 트리에 더 많은 수동 복사를합니다.

  3. 위의 변형. 포기하십시오 exp 현재 지점은 실험을 위해 두 개의 추가 로컬 리포지토리를 사용합니다. 이로 인해 파일의 수동 복사가 훨씬 더 간단합니다.

이 세 가지 접근법 모두 지루하고 오류가 발생하기 쉽습니다. 더 나은 접근 방식이 있기를 바랍니다. 필터 경로 매개 변수와 비슷한 것 git-merge 더 선택적.

도움이 되었습니까?

해결책

당신은 사용합니다 체리 픽 명령 한 분기에서 개별 커밋을 받으려는 명령.

원하는 변경 사항이 개별 커밋에 있지 않은 경우 여기에 표시된 방법을 사용하십시오. 커밋을 개별 커밋으로 나눕니다. 대략적으로 말하면, 당신은 사용합니다 git rebase -i 그렇다면 원래 커밋을 편집하겠다고합니다 git reset HEAD^ 그러면 변경 사항을 선택적으로 되돌립니다 git commit 역사상 새로운 헌신으로 그 비트를 커밋합니다.

여기에 또 다른 멋진 방법이 있습니다 그들이 사용하는 Red Hat Magazine에서 git add --patch 또는 아마도 git add --interactive 다른 변경 사항을 개별 파일로 분할하려면 덩어리의 일부만 추가 할 수 있습니다 ( "분할"의 해당 페이지에서 검색).

변경 사항을 나누면 이제 원하는 변경 사항 만 체리를 찍을 수 있습니다.

다른 팁

위에서 언급 한 것과 똑같은 문제가있었습니다. 그러나 나는 찾았다 이것 답을 설명하는 데 명확합니다.

요약:

  • 병합하려는 지점에서 경로를 확인하고

    $ git checkout source_branch -- <paths>...
    

    힌트 : 그것은 또한없이 작동합니다 -- 링크 된 게시물에서 볼 수 있습니다.

  • 또는 덩어리를 선택적으로 병합합니다

    $ git checkout -p source_branch -- <paths>...
    

    또는 재설정을 사용한 다음 옵션을 추가하십시오. -p,

    $ git reset <paths>...
    $ git add -p <paths>...
    
  • 마침내 커밋

    $ git commit -m "'Merge' these changes"
    

한 분기에서 다른 지점으로 파일을 선택적으로 병합하려면

git merge --no-ff --no-commit branchX

어디 branchX 현재 지점으로 병합하려는 지점입니다.

그만큼 --no-commit 옵션은 파일을 실제로 커밋하지 않고 GIT에 의해 병합 된 파일을 무대에 올릴 것입니다. 이렇게하면 병합 된 파일을 수정 한 후 원하는 파일을 수정 한 다음 직접 커밋 할 수 있습니다.

파일 병합 방법에 따라 4 가지 사례가 있습니다.

1) 진정한 병합을 원합니다.

이 경우 GIT가 자동으로 병합 된 방식으로 병합 된 파일을 수락 한 다음 커밋합니다.

2) 병합하고 싶지 않은 파일이 있습니다.

예를 들어, 현재 브랜치의 버전을 유지하고 병합중인 브랜치의 버전을 무시하려고합니다.

현재 분기에서 버전을 선택하려면 다음을 실행하십시오.

git checkout HEAD file1

이것은 버전을 검색합니다 file1 현재 브랜치에서 file1 git에 의해 자동차가.

3) BranchX에서 버전을 원한다면 (진정한 병합이 아님).

운영:

git checkout branchX file1

이것은 버전을 검색합니다 file1 안에 branchX 그리고 덮어 쓰기 file1 git에 의해 자동으로 제공됩니다.

4) 마지막 경우는 특정 합병 만 선택하려는 경우입니다. file1.

이 경우 수정 된 것을 편집 할 수 있습니다 file1 직접, 원하는 버전으로 업데이트하십시오. file1 그리고 나서 커밋합니다.

git이 파일을 자동으로 병합 할 수 없으면 파일을 "로보고합니다.무너질"충돌을 수동으로 해결 해야하는 사본을 생성합니다.



예를 들어 더 설명하려면 병합하고 싶다고 가정 해 봅시다. branchX 현재 지점으로 :

git merge --no-ff --no-commit branchX

당신은 다음을 실행합니다 git status 명령 수정 된 파일의 상태를 보려면

예를 들어:

git status

# On branch master
# Changes to be committed:
#
#       modified:   file1
#       modified:   file2
#       modified:   file3
# Unmerged paths:
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#       both modified:      file4
#

어디에 file1, file2, 그리고 file3 git가 성공적으로 자동으로 제공 한 파일입니다.

이것이 의미하는 바는 master 그리고 branchX 이 세 가지 파일 모두 충돌없이 결합되었습니다.

실행하여 병합이 어떻게 이루어 졌는지 검사 할 수 있습니다. git diff --cached;

git diff --cached file1
git diff --cached file2
git diff --cached file3

어떤 병합이 바람직하지 않다는 것을 알게되면, 당신은 할 수 있습니다

  1. 파일을 직접 편집하십시오
  2. 저장
  3. git commit

합병하고 싶지 않다면 file1 현재 지점에서 버전을 유지하고 싶습니다.

운영

git checkout HEAD file1

합병하고 싶지 않다면 file2 그리고 버전 만 원합니다 branchX

운영

git checkout branchX file2

네가 원한다면 file3 자동으로 병합하려면 아무것도하지 마십시오.

Git 은이 시점에서 이미 합병했습니다.


file4 위는 Git의 실패한 병합입니다. 이것은 동일한 라인에서 발생하는 두 가지에 변경 사항이 있음을 의미합니다. 여기에서 충돌을 수동으로 해결 해야하는 곳입니다. 파일을 직접 편집하거나 원하는 지점의 버전에 대한 체크 아웃 명령을 실행하여 병합 된 병합을 폐기 할 수 있습니다. file4 될 것입니다.


마지막으로, 잊지 마십시오 git commit.

나는 위의 접근법이 마음에 들지 않습니다. Cherry-Pick을 사용하는 것은 한 번의 변화를 선택하는 데 적합하지만 나쁜 변화를 제외한 모든 변화를 가져 오려면 고통입니다. 여기 내 접근 방식이 있습니다.

아니요 --interactive 논쟁은 당신이 git 합병으로 전달할 수 있습니다.

대안은 다음과 같습니다.

당신은 Branch 'Feature'에 약간의 변화가 있으며, 일부는 조잡하지 않은 방식으로 'Mas

git checkout feature
git checkout -b temp
git rebase -i master

# Above will drop you in an editor and pick the changes you want ala:
pick 7266df7 First change
pick 1b3f7df Another change
pick 5bbf56f Last change

# Rebase b44c147..5bbf56f onto b44c147
#
# Commands:
# pick = use commit
# edit = use commit, but stop for amending
# squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

git checkout master
git pull . temp
git branch -d temp

따라서 쉘 스크립트로 마스터를 $로 변경하고 기능을 $로 변경하면 다음과 같이됩니다.

#!/bin/bash
# git-interactive-merge
from=$1
to=$2
git checkout $from
git checkout -b ${from}_tmp
git rebase -i $to
# Above will drop you in an editor and pick the changes you want
git checkout $to
git pull . ${from}_tmp
git branch -d ${from}_tmp

다른 방법이 있습니다.

git checkout -p

그것은 사이의 혼합입니다 git checkout 그리고 git add -p 그리고 정확히 당신이 찾고있는 것일 수 있습니다.

   -p, --patch
       Interactively select hunks in the difference between the <tree-ish>
       (or the index, if unspecified) and the working tree. The chosen
       hunks are then applied in reverse to the working tree (and if a
       <tree-ish> was specified, the index).

       This means that you can use git checkout -p to selectively discard
       edits from your current working tree. See the “Interactive Mode”
       section of git-add(1) to learn how to operate the --patch mode.

이 답변 중 일부는 꽤 좋지만 실제로 OP의 원래 제약 조건에 응답 한 것은 없다고 생각합니다. 특정 분기에서 특정 파일 선택. 이 솔루션은 그렇게하지만 파일이 많으면 지루할 수 있습니다.

당신이 있다고 가정 해 봅시다 master, exp1, 그리고 exp2 가지. 각 실험 분기에서 하나의 파일을 마스터로 병합하려고합니다. 나는 다음과 같은 일을 할 것입니다.

git checkout master
git checkout exp1 path/to/file_a
git checkout exp2 path/to/file_b

# save these files as a stash
git stash
# merge stash with master
git merge stash

이것은 원하는 각 파일에 대해 파일 내 차이를 제공합니다. 더 이상 아무것도. 더 적은 것은 없습니다. 내 경우에는 레일 2에서 레일 3으로 앱을 변경하는 경우 버전 간의 파일 변경이 근본적으로 다른 파일 변경이 유용합니다.

편집하다: 이것은 파일을 병합하지만 스마트 병합을 수행합니다. 이 방법을 사용하여 파일 내 차이 정보를 얻기 위해이 방법을 사용하는 방법을 알 수 없었습니다. -s recursive -X ignore-all-space 옵션)

1800 정보의 답변은 완전히 정확합니다. 그러나 git noob로서 "사용 git cherry-pick"은 인터넷을 조금 더 파고 들지 않고 이것을 알아 내기에 충분하지 않았으므로 다른 사람이있는 경우 더 자세한 가이드를 게시 할 것이라고 생각했습니다. 비슷한 보트.

내 유스 케이스는 다른 사람의 Github 지점에서 내 자신의 변화를 선택적으로 끌어 당기고 싶어했습니다. 변경 사항이있는 로컬 브랜치가 이미있는 경우 2 단계와 5-7 단계 만 수행하면됩니다.

  1. 제작하려는 변경 사항이있는 로컬 브랜치를 생성 (생성되지 않은 경우).

    $ git branch mybranch <base branch>

  2. 그것으로 전환하십시오.

    $ git checkout mybranch

  3. 상대방의 계정에서 원하는 변경 사항을 아래로 내립니다. 아직 원격으로 추가하고 싶지 않은 경우.

    $ git remote add repos-w-changes <git url>

  4. 지점에서 모든 것을 내려 놓으십시오.

    $ git pull repos-w-changes branch-i-want

  5. 원하는 변경 사항을 확인하려면 커밋 로그를 확인하십시오.

    $ git log

  6. 변경 사항을 가져 오려는 분기로 다시 전환하십시오.

    $ git checkout originalbranch

  7. 체리는 해시와 함께 커밋을 하나씩 선택하십시오.

    $ git cherry-pick -x hash-of-commit

모자 팁 : http://www.sourcemage.org/git_guide

교체 할 수있는 방법은 다음과 같습니다 Myclass.java 파일에 master 지점 Myclass.java 안에 feature1 나뭇가지. 더라도 작동합니다 Myclass.java 존재하지 않습니다 master.

git checkout master
git checkout feature1 Myclass.java

이것은 합병이 아니라 덮어 쓰고 오히려 마스터 브랜치의 로컬 변경 사항을 무시합니다.

간단한 방법, 실제로 병합 특정 파일의 특정 파일은 특정 파일을 다른 파일의 파일로 바꾸는 것이 아닙니다.

1 단계 : 가지가 다릅니다

git diff branch_b > my_patch_file.patch

현재 분기와 branch_b의 차이에 대한 패치 파일을 만듭니다.

2 단계 : 패턴과 일치하는 파일에 패치를 적용합니다.

git apply -p1 --include=pattern/matching/the/path/to/file/or/folder my_patch_file.patch

옵션에 대한 유용한 메모

당신이 사용할 수있는 * 포함 패턴의 와일드 카드로.

슬래시는 탈출 할 필요가 없습니다.

또한, 당신은 -대신 exclude를 사용하고 패턴과 일치하는 파일을 제외한 모든 것에 적용하거나 -r로 패치를 반전시킬 수 있습니다.

-p1 옵션은 *unix 패치 명령의 holdover와 패치 파일의 내용이 각 파일 이름을 a/ 또는 b/ (또는 패치 파일이 생성 된 방법에 따라 다릅니다) 제거 해야하는 패치를 적용 해야하는 파일의 경로에 실제 파일을 파악할 수 있도록 제거해야합니다.

더 많은 옵션은 Git-Apply의 Man Page를 확인하십시오.

3 단계 : 3 단계는 없습니다

분명히 당신은 당신의 변화를 저지르고 싶지만, 당신은 당신이 당신의 커밋을하기 전에하고 싶은 다른 관련 조정이 없다고 말할 것입니다.

더 "간단한"합병이 원하지 않는 훨씬 더 많은 변화를 가져 왔을지라도 최소한의 소란으로 다른 지점의 몇 파일 만 팔로우하는 방법은 다음과 같습니다.

첫째, 당신은 당신이 커밋하려는 것이 작업 디렉토리의 파일에 전혀 아무것도하지 않고, 당신이 커밋하려는 것이 합병이라고 미리 선언하는 특이한 단계를 취합니다.

git merge --no-ff --no-commit -s ours branchname1

. . . 여기서 "BranchName"은 합병한다고 주장하는 것입니다. 당신이 즉시 커밋한다면, 그것은 변화가 없지만 여전히 다른 지점에서 조상을 보여줄 것입니다. 더 많은 분기/태그 등을 추가 할 수 있습니다. 필요한 경우 명령 행에도. 그러나이 시점에서 커밋 할 변경이 없으므로 다음에 다른 개정판에서 파일을 가져 오십시오.

git checkout branchname1 -- file1 file2 etc

하나 이상의 다른 지점에서 병합하는 경우 필요에 따라 반복하십시오.

git checkout branchname2 -- file3 file4 etc

이제 다른 지점의 파일은 인덱스에 있으며 역사와 함께 커밋 될 준비가되었습니다.

git commit

그리고 당신은 그 커밋 메시지에서 많은 설명을 할 것입니다.

그러나 명확하지 않은 경우, 이것은 할 일이 엉망이된다는 것을 주목하십시오. 그것은 "지점"이 무엇인지에 대한 정신이 아니며 Cherry-Pick은 여기서 당신이하고있는 일을하는 더 정직한 방법입니다. 지난 시간에 가져 오지 않은 것과 동일한 지점의 다른 파일에 대해 다른 "병합"을하고 싶다면 "이미 최신"메시지로 중지 할 것입니다. "From"지점에서 하나 이상의 다른 지점이어야합니다.

나는 조금 늦었다는 것을 알고 있지만 이것은 선택적 파일을 병합하기위한 나의 워크 플로입니다.

#make a new branch ( this will be temporary)
git checkout -b newbranch
# grab the changes 
git merge --no-commit  featurebranch
# unstage those changes
git reset HEAD
(you can now see the files from the merge are unstaged)
# now you can chose which files are to be merged.
git add -p
# remember to "git add" any new files you wish to keep
git commit

나는 찾았다 이 게시물 가장 간단한 대답을 포함합니다. 단순히 :

$ #git checkout <branch from which you want files> <file paths>

예시:

$ #pulling .gitignore file from branchB into current branch
$ git checkout branchB .gitignore

자세한 내용은 게시물을 참조하십시오.

가장 쉬운 방법

git checkout [branch with file] [path to file you would like to merge]

당신이 달리면

git status

파일이 이미 단계적으로 보일 것입니다 ...

그런 다음 실행하십시오

git commit -m "Merge changes on '[branch]' to [file]"

단순한.

Git에 여전히 "상자에서"편리한 도구가 없다는 것은 이상합니다. 이전 버전 브랜치 (여전히 많은 소프트웨어 사용자가 있음)를 업데이트 할 때 크게 사용합니다. 일부 현재 버전 분기의 버그 문제. 이 경우 종종 신속하게 얻는 것이 필요합니다. 일부 트렁크의 파일의 코드 줄은 다른 많은 변경 사항을 무시하고 (기존 버전으로 들어 가지 않아야 함) ... 물론 대화식 3 방향 이 경우 병합이 필요합니다. git checkout --patch <branch> <file path> 이 선택적 병합 목적을 위해 사용할 수 없습니다.

쉽게 할 수 있습니다 :

이 줄을 추가하십시오 [alias] 글로벌 섹션 .gitconfig 또는 로컬 .git/config 파일:

[alias]
    mergetool-file = "!sh -c 'git show $1:$2 > $2.theirs; git show $(git merge-base $1 $(git rev-parse HEAD)):$2 > $2.base; /C/BCompare3/BCompare.exe $2.theirs $2 $2.base $2; rm -f $2.theirs; rm -f $2.base;' -"

그것은 당신이 비교 이상으로 사용한다는 것을 의미합니다. 필요한 경우 선택한 소프트웨어로 변경하십시오. 또는 대화식 선택적 병합이 필요하지 않으면 3 방향 자동 관리자로 변경할 수 있습니다.

[alias]
    mergetool-file = "!sh -c 'git show $1:$2 > $2.theirs; git show $(git merge-base $1 $(git rev-parse HEAD)):$2 > $2.base; git merge-file $2 $2.base $2.theirs; rm -f $2.theirs; rm -f $2.base;' -"

그런 다음 다음과 같이 사용하십시오.

git mergetool-file <source branch> <file path>

이것은 당신에게 진정한 선택을 줄 것입니다 나무 길 다른 지점에서 모든 파일의 기회를 병합하십시오.

정확히 당신이 찾고 있던 것이 아니지만 나에게 유용했습니다.

git checkout -p <branch> -- <paths> ...

몇 가지 답변이 혼합되어 있습니다.

위에서 언급 한 것과 똑같은 문제가있었습니다. 그러나 나는 찾았다 이 git 블로그 답을 설명하는 데 명확합니다.

위의 링크에서 명령 :

#You are in the branch you want to merge to
git checkout <branch_you_want_to_merge_from> <file_paths...>

나는 할 것이다

git diff commit1..commit2 filepattern | git-apply -Index && git commit

이렇게하면 지점에서 파일 패터 넷의 커밋 범위를 제한 할 수 있습니다.

도난당한 : http://www.gelato.unsw.edu.au/archives/git/0701/37964.html

위의 'Git-Interactive-Merge'답변을 좋아하지만 더 쉬운 것이 있습니다. 대화식 및 상호 작용의 Rebase 조합을 사용하여 다음을 수행하도록하십시오.

      A---C1---o---C2---o---o feature
     /
----o---o---o---o master

따라서이 사례는 'feature'branch (Branch Point 'A')에서 C1과 C2를 원하지만 나머지는 현재는 없습니다.

# git branch temp feature
# git checkout master
# git rebase -i --onto HEAD A temp

위와 같이, C1 및 C2에 대한 '선택'라인을 선택하는 대화식 편집기 (위와 같이)를 선택합니다. 저장하고 종료하면 Rebase와 함께 진행하여 Branch 'Temp'를 제공하고 Master + C1 + C2로 향합니다.

      A---C1---o---C2---o---o feature
     /
----o---o---o---o-master--C1---C2 [HEAD, temp]

그런 다음 마스터를 업데이트하여 임시 지점을 헤드하고 삭제할 수 있습니다.

# git branch -f master HEAD
# git branch -d temp

나는이 질문이 오래되고 다른 많은 답변이 있다는 것을 알고 있지만, 디렉토리를 부분적으로 병합하기 위해 'Pmerge'라는 스크립트를 썼습니다. 그것은 진행중인 작업이며 여전히 git과 bash 스크립팅을 모두 배우고 있습니다.

이 명령을 사용합니다 git merge --no-commit 그런 다음 제공된 경로와 일치하지 않는 변경 사항이 없습니다.

용법: git pmerge branch path
예시: git merge develop src/

나는 그것을 광범위하게 테스트하지 않았습니다. 작업 디렉토리에는 커밋되지 않은 변경 사항과 추적되지 않은 파일이 없어야합니다.

#!/bin/bash

E_BADARGS=65

if [ $# -ne 2 ]
then
    echo "Usage: `basename $0` branch path"
    exit $E_BADARGS
fi

git merge $1 --no-commit
IFS=$'\n'
# list of changes due to merge | replace nulls w newlines | strip lines to just filenames | ensure lines are unique
for f in $(git status --porcelain -z -uno | tr '\000' '\n' | sed -e 's/^[[:graph:]][[:space:]]\{1,\}//' | uniq); do
    [[ $f == $2* ]] && continue
    if git reset $f >/dev/null 2>&1; then
        # reset failed... file was previously unversioned
        echo Deleting $f
        rm $f
    else
        echo Reverting $f
        git checkout -- $f >/dev/null 2>&1
    fi
done
unset IFS

는 어때 git reset --soft branch ? 아무도 아직 언급하지 않았다는 사실에 놀랐습니다.

저에게는 다른 지점에서 변경 사항을 선택적으로 선택하는 가장 쉬운 방법입니다.이 명령은 작업 트리에 넣고 모든 차이가 변경되며 필요한 것을 쉽게 선택하거나 되돌릴 수 있습니다. 이런 식으로, 나는 커밋 된 파일에 대해 완전한 통제력을 가지고 있습니다.

당신이 사용할 수있는 read-tree 주어진 원격 트리를 현재 색인으로 읽거나 병합하려면 예를 들어

git remote add foo git@example.com/foo.git
git fetch foo
git read-tree --prefix=my-folder/ -u foo/master:trunk/their-folder

병합을 수행하려면 사용하십시오 -m 대신에.

또한보십시오: git에서 하위 디렉토리를 어떻게 병합합니까?

파일 별 선택적 병합/커밋을위한 간단한 접근 방식 :

git checkout dstBranch git merge srcBranch // make changes, including resolving conflicts to single files git add singleFile1 singleFile2 git commit -m "message specific to a few files" git reset --hard # blow away uncommitted changes

변경된 파일이 너무 많지 않으면 추가 커밋없이 남을 것입니다.

1. 일시적으로 분기를 복제합니다
$ git checkout -b temp_branch

2. Last Wanted Commit으로 재설정
$ git reset --hard HEAD~n, 어디 n 돌아 가야 할 커밋 수입니다.

3. 원본 브랜치에서 각 파일을 확인하십시오
$ git checkout origin/original_branch filename.ext

이제 필요한 경우 (원격을 덮어 쓰기 위해) 밀고 강제로 푸시 할 수 있습니다.

두 분기의 현재 커밋 사이에 몇 개의 파일 만 변경되면 다른 파일을 통과하여 변경 사항을 수동으로 병합합니다.

git difftoll <branch-1>..<branch-2>

특정 디렉토리를 병합하고 다른 모든 것을 그대로 남겨두고 역사를 보존해야한다면, 이것을 시도 할 수 있습니다 ... 새로 만들 수 있습니다. target-branch 에서 master 실험하기 전에.

아래 단계는 두 개의 가지가 있다고 가정합니다 target-branch 그리고 source-branch, 및 디렉토리 dir-to-merge 당신이 병합하고 싶은 것은 그 안에 있습니다 source-branch. 또한 다른 디렉토리가 있다고 가정합니다 dir-to-retain 당신이 변화하고 역사를 유지하고 싶지 않은 목표에서. 또한, 합병 충돌이 있다고 가정합니다 dir-to-merge.

git checkout target-branch
git merge --no-ff --no-commit -X theirs source-branch
# the option "-X theirs", will pick theirs when there is a conflict. 
# the options "--no--ff --no-commit" prevent a commit after a merge, and give you an opportunity to fix other directories you want to retain, before you commit this merge.

# the above, would have messed up the other directories that you want to retain.
# so you need to reset them for every directory that you want to retain.
git reset HEAD dir-to-retain
# verify everything and commit.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top