programing

로컬 Git 변경을 제거하는 다양한 방법

i4 2023. 4. 26. 22:58
반응형

로컬 Git 변경을 제거하는 다양한 방법

방금 git 저장소를 복제하고 지점을 체크아웃했습니다.저는 그것을 작업했고, 원본을 원했기 때문에 모든 지역 변경 사항을 제거하기로 결정했습니다.

간단히 말해서 로컬 변경 사항을 제거하기 위해 다음 두 가지 명령을 수행해야 했습니다.

git checkout .

git clean -f

제 질문은,

이것이 지역 변경 사항을 제거하는 올바른 접근 방식입니까? 아니면 올바른 접근 방식을 알려주십시오.

제언사합까니를 합니까?git reset --hard 명령이 할 수 에 령 이 없 재 할 있 때 문 기 에 수 정

감사해요.

* 해결책 : 주요 편집 : 03/26 : * 모호한 용어의 대부분을 git 특정 용어로 대체 [Tracked/Untracked/Staged/Unstaged]

로컬을 변경할 때 파일 범주는 세 가지뿐입니다.

유형 1. 준비된 추적 파일

유형 2. 단계별 추적 파일

유형 3. 단계별 추적되지 않은 파일 또는 추적되지 않은 파일

  • 준비됨 - 준비 영역으로 이동/인덱스에 추가된 항목
  • 추적 - 수정된 파일
  • 추적되지 않음 - 새 파일입니다.항상 미스테이지.스테이징된 경우 추적된다는 의미입니다.

각 명령이 수행하는 작업:

  1. git checkout .only [ 2를 합니다. [유형 2]

  2. git clean -fonly [ 3를 제거합니다.

  3. git reset --hard 및 합니다 [ 1,

  4. git stash -u 1, 2, 3의 변경사항을 합니다.

결론:

둘 중 하나를 사용할 수 있다는 것은 확실합니다.

(1) combination of `git clean -f` and `git reset --hard` 

OR

(2) `git stash -u`

원하는 결과를 얻기 위해.

주의: '물건을 안전하고 비밀스럽게 특정한 장소에 보관한다'는 뜻의 스태킹입니다.이 값은 항상 다음을 사용하여 검색할 수 있습니다.git stash pop따라서 위의 두 가지 옵션 중 하나를 선택하는 것이 개발자의 결정입니다.

크리스토프와 프레데릭 쇠닝에게 감사드립니다.

편집: 03/27

저는 '주의' 메모를 할 가치가 있다고 생각했습니다.git clean -f

git clean -f

돌아갈 수 없습니다.사용하다-n또는--dry-run당신이 할 피해를 미리 볼 수 있습니다.

하려면 를 하십시오.git clean -f -d

files만, 무된파제다실다니행합음을을 합니다.git clean -f -X

되지 않은 파일을 하려면 를 합니다.git clean -f -x

: on 참조 : 추가정보git clean현재 Git 작업 트리에서 로컬(추적되지 않은) 파일을 제거하는 방법은 무엇입니까?

편집: 05/20/15

분기의 모든 로컬 커밋 삭제 [로컬 커밋 제거]

분기에 커밋을 이 과 동일하게 하려면 를 .git reset --hard @{u}

참조: http://sethrobertson.github.io/GitFixUm/fixup.html

아니면 하라git reset --hard origin/master이 [지역 지점]인 master]

참고: 2015년 6월 12일 이 질문은 중복으로 표시된 다른 SO 질문의 중복이 아닙니다.이 질문에서는 로컬 GIT 변경사항을 제거하는 방법[추가된 파일 제거, 기존 파일 등에 추가된 변경사항 제거 및 다양한 접근 방식]에 대해 설명합니다. 다른 SO 스레드에서는 로컬 커밋을 제거하는 방법만 설명합니다.파일을 추가했는데 파일만 제거하려면 다른 SO 스레드에서 이에 대해 논의하지 않습니다.따라서 이것은 다른 것과 중복되지 않습니다].

편집: 06/23/15

이미 원격 리포지토리에 푸시된 커밋을 되돌리는 방법은 무엇입니까?

$ git revert ab12cd15

편집: 2015년 09월 01일

로컬 분기 및 원격 분기에서 이전 커밋 삭제

사례: 방금 로컬 지점에 변경 사항을 적용하고 즉시 원격 지점으로 이동했습니다. 갑자기, 이런!저는 이 거스름돈이 없습니다.이제 어떻게 해요?

git reset --hard HEAD~1 지점에서

git push origin HEAD --force[두 명령을 모두 실행해야 합니다.]에 합니다.

그 지점은 무엇입니까?현재 체크아웃된 지점입니다.

2015년 9월 8일 편집 - 로컬 깃 병합 제거:

하고 있습니다master 및 분기병합master하여 phase2

$ git status
# On branch master

$ git merge phase2

$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 8 commits.

Q: 이 병합을 제거하는 방법은 무엇입니까?시험을 마친git reset --hard그리고.git clean -d -f둘 다 효과가 없었습니다.

작동한 것은 다음 중 하나뿐입니다.

$ git reset --hard origin/master

또는

$ git reset --hard HEAD~8

또는

$ git reset --hard 9a88396f51e2a068bb7[sha commit code - 모든 병합 커밋이 발생하기 전에 존재했던 코드입니다.]

이 모든 것은 실행 취소/반환하려는 항목에 따라 달라집니다.우베의 링크에 있는 게시물을 읽는 것으로 시작하세요.하지만 답을 시도하는 것:

하드 리셋

git reset --hard [HEAD]

추적된 파일에 대한 모든 단계별 및 단계별 변경 사항을 완전히 제거합니다.

"원격에서 완전한 복제를 수행한 것처럼 모든 작업을 취소"하는 경우 하드 리셋을 사용하는 경우가 많습니다.당신의 경우, 당신이 단지 당신의 레포퍼리스를 원하는 곳에서, 이것은 효과가 있을 것입니다.

깨끗한

git clean [-f]

추적되지 않는 파일을 제거합니다.

임시 파일을 제거하지만 이미 추적된 파일에 대한 단계별 및 단계별 변경 사항은 유지합니다.대부분의 경우 반복적으로 치료하는 대신 무시 규칙을 만들 수 있습니다. 예를 들어 C# 프로젝트의 bin/obj 폴더는 공간을 절약하기 위해 레포에서 제외하는 것이 일반적입니다.

-f(force) 옵션을 사용하면 추적되지 않고 ignore-rule을 통해 git에 의해 무시되는 파일도 제거됩니다.위의 경우 git에 의해 폴더가 무시되더라도 bin/obj 폴더를 추적하지 않는 무시 규칙을 사용하면 force-option을 사용하면 파일 시스템에서 폴더가 제거됩니다.배포를 스크립팅할 때와 같이 이 기능이 사용되는 것을 가끔 보았습니다. 배포, 압축 또는 기타 작업을 수행하기 전에 코드를 정리해야 합니다.

Gitclean은 이미 추적 중인 파일을 건드리지 않습니다.

체크아웃 "도트"

git checkout .

저는 사실 당신의 게시물을 읽기 전에 이 표기법을 본 적이 없습니다.이에 대한 설명서를 찾는 데 어려움을 겪고 있지만(누군가가 도움을 줄 수 있을지도 모르지만), 조금 장난치는 것을 보면 다음과 같은 의미가 있는 것 같습니다.

"내 작업 트리의 모든 변경 사항을 확인합니다."

즉, 추적된 파일의 단계별 변경 내용을 실행 취소합니다.이것은 분명히 단계별 변경 사항을 건드리지 않고 추적되지 않은 파일만 남겨둡니다.

스태킹

일부 답변은 저장을 언급합니다.문구가 암시하는 바와 같이, 당신은 무언가를 하고 있을 때(커밋할 준비가 되지 않았을 때) 아마도 스태킹을 사용할 것이며, 나중에 "메시 데스크"로 돌아가기 위해 일시적으로 분기를 바꾸거나 코드의 다른 상태로 작업해야 할 것입니다.당신 질문에 이것이 적용될 것 같지는 않지만, 확실히 유용합니다.

요약하자면

이 단지 을 치는 것들을 한다면, 중요한 수도 있다는 것을 한다면, 만약 이 그것을 사용한다면, 일적으로약했만약로, 혹한것면다을은들치비밀한슷단멀리장릴어나거당을난지요신이반진면나거화한있수다고들신확중다속을떨신한이변당▁generally,면,다,한▁around▁like▁if▁and▁changes▁you▁using▁you▁you▁a▁playing▁the▁if▁pushed▁confident▁committed▁or▁to을▁important▁are▁have것▁remote들▁maybe일git reset --hard HEAD에 뒤에git clean -f방금 복제되어 분기에서 체크아웃된 경우 코드가 있는 상태로 삭제됩니다.다시 설정하면 단계적이지만 커밋되지 않은 변경 사항도 제거된다는 점을 강조해야 합니다.커밋되지 않은 모든 항목을 삭제합니다(추적되지 않은 파일 제외, 이 경우 치료 사용).

다른 모든 명령은 세분화된 "실행 취소"가 필요한 더 복잡한 시나리오를 용이하게 하기 위해 존재합니다. :)

결론을 , 로 사용할 못한 는 저는당질문 #1이고생다만지, 마로으로내, 지2을립:신사할용필:당이요한을못이유찾전지성혀다니신결의각론하막루다졌어입니다.git reset --hard당신은 아무것도 무대에 올린 적이 없다는 것이었습니다.당신도 변화를 계획했었습니까?git checkout .도 아니다git clean -f그것을 되돌렸을 것입니다

이것이 덮이기를 바랍니다.

지금 답변을 추가하는 이유:

지금까지 저는 결론과 '답'을 처음 질문 자체에 추가하고 있었고, 질문을 매우 길게 만들어 별개의 답변으로 이동했습니다.

나는 또한 다른 사람을 돕기 위해 내가 git을 유지하는 데 도움이 되는 git 명령을 더 자주 사용했습니다.

기본적으로 모든 로컬 커밋을 치료하고


커밋을 수행하기 전에 먼저 커밋과 함께 표시되는 사용자 이름 및 전자 메일을 구성합니다.

#커밋 트랜잭션에 첨부할 이름 설정

$ git config --global user.name "[name]"

#커밋 트랜잭션에 첨부할 전자 메일 설정

$ git config --global user.email "[email address]"

#글로벌 구성 나열

$ git config --list

#원격 URL 나열

$ git remote show origin

#현황조회

git status

#로컬 및 원격 지사 모두 나열

git branch -a

#새 로컬 분기를 만들고 이 분기에서 작업을 시작합니다.

git checkout -b "branchname" 

또는 2단계 프로세스로 수행할 수 있습니다.

만기분들:git branch branchname분기에서 :git checkout branchname

#commit local changes [2단계 프로세스:- 파일을 인덱스에 추가합니다. 즉, 준비 영역에 추가합니다.그런 다음 이 준비 영역에 있는 파일을 커밋합니다.]

git add <path to file>

git commit -m "commit message"

#다른 지역 지사 방문

git checkout "local branch name"

#로컬 분기의 모든 변경 사항 제거 [새로운 파일 추가, 기존 파일 수정, 로컬 커밋 등 로컬 분기에서 일부 변경 사항을 수행했지만 더 이상 필요하지 않다고 가정합니다.git clean -d -f그리고.git reset --hard[로컬 커밋을 제외하고 로컬 분기에 대한 모든 로컬 변경 내용 치료]

git stash -u 사항을 합니다.

참고: 다음 중 하나의 조합을 사용할 수 있습니다.git clean –d –f그리고.git reset --hard OR (2)git stash -u원하는 결과를 얻기 위해.

주 1: '물건을 안전하고 비밀스럽게 특정한 장소에 보관한다'는 뜻의 스태킹.이 값은 항상 gitstash pop을 사용하여 검색할 수 있습니다.따라서 위의 두 가지 옵션 중 하나를 선택하는 것이 개발자의 결정입니다.

2: 참고 2:git reset --hard작업 디렉터리 변경 내용을 삭제합니다.이 명령을 실행하기 전에 보관할 로컬 변경사항을 저장해야 합니다.

마스터 분기로 전환하고 최신 상태인지 확인합니다.

git checkout master

git fetch[에 대한 업데이트를 () 수 있습니다 [ 설정에 따라 [git/master/origin/master에 대한 업데이트가

git pull

피쳐 분기를 마스터 분기로 병합합니다.

git merge feature_branch

마스터 분기를 오리진의 상태로 재설정합니다.

git reset origin/master

#로컬에서 실수로 파일을 삭제했습니다. 파일을 다시 검색하는 방법은 무엇입니까?도아git status.

git checkout branchname <file path name>

바로 그거야!

#마스터 브랜치를 다른 브랜치와 병합

git checkout master
git merge someotherbranchname

#로컬 지점 지정

git branch -m old-branch-name new-branch-name

#로컬 분기 삭제

git branch -D branch-name

#원격 분기 삭제

git push origin --delete branchname

또는

git push origin :branch-name

#이미 원격 리포지토리에 푸시된 커밋을 확인합니다.

git revert hgytyz4567

#GIT를 사용한 이전 커밋에서 분기

git branch branchname <sha1-of-commit>

#이미 원격으로 푸시된 최근 커밋 메시지 변경

git commit --amend -m "new commit message"
git push --force origin <branch-name>

이 분기의 모든 로컬 커밋을 삭제하는 중 [로컬 커밋 제거]

이 분기에 대한 모든 로컬 커밋을 취소하려면 로컬 분기를 이 분기의 "업스트림"과 동일하게 만들려면 를 실행합니다.

git reset --hard @{u}

참조: http://sethrobertson.github.io/GitFixUm/fixup.html 또는 dogit reset --hard origin/master로컬 브랜치가 마스터인 경우]

이미 원격 리포지토리에 푸시된 커밋을 되돌리시겠습니까?

$ git revert ab12cd15

#로컬 브랜치와 원격 브랜치에서 이전 커밋 삭제

사용 사례:방금 로컬 지점에 변경 사항을 적용하고 즉시 원격 지점으로 이동했습니다. 갑자기 이런!저는 이 거스름돈이 없습니다.이제 어떻게 해요?

git reset --hard HEAD~1 지점에서 해당 . 가 한 의 커밋을 해당 커밋을 로컬 지점에서 삭제한 경우. 1은 사용자가 한 하나의 커밋을 나타냅니다.]

git push origin HEAD --force[두 명령을 모두 실행해야 합니다.원격 분기에서 삭제하는 경우].현재 체크아웃된 분기는 이 작업을 수행하는 분기로 참조됩니다.

#로컬 및 원격 repo에서 최근 커밋 일부를 삭제하고 원하는 커밋으로 유지합니다. (로컬 및 원격에서 커밋을 되돌리는 일종)

커밋이develop'

commitid-1 done at 9am
commitid-2 done at 10am
commitid-3 done at 11am. // latest commit. HEAD is current here.

이전 커밋으로 되돌리려면(분기 상태 변경)

git log --oneline --decorate --graph의 모든 위원회를 ▁all▁to해.

git clean -d -f로컬 변경 내용을 모두 삭제합니다.

git reset --hard commitid-1에서 이 ID로

git push -u origin +develop이 상태를 원격으로 푸시합니다.강제로 밀다

로컬 Git 병합 제거:사례: 나는 마스터 브랜치에 있으며 새로 작동하는 브랜치 단계 2와 마스터 브랜치를 병합했습니다.

$ git status

분기 마스터에

$ git merge phase2 $ git status

분기 마스터에

귀사의 지점은 '원산지/마스터'보다 8 커밋 앞서 있습니다.

Q: 이 로컬 깃 병합을 제거하는 방법은 무엇입니까?시험을 마친git reset --hard그리고.git clean -d -f둘 다 효과가 없었습니다.작동한 것은 다음 중 하나뿐입니다.

git reset -- 하드 오리진/마스터

또는

git reset --hard HEAD~8

또는

$ git reset --hard 9a88396f51e2a068bb7[sha commit code - 모든 병합 커밋이 발생하기 전에 존재했던 코드입니다.]

#gitignore 파일 생성

touch .gitignore usersmac에서 unix 파일 생성

샘플 .gitignore 내용:

.project
*.py
.settings

GIT 치트 시트 참조 링크: https://services.github.com/on-demand/downloads/github-git-cheat-sheet.pdf

모든 것과 마찬가지로 여러 가지 방법으로 수행할 수 있습니다.사용한 두 가지 명령은 한 가지 방법입니다.당신이 할 수 있었던 또 다른 일은 단순히 그것들을 저장하는 것입니다.git stash -u.-u새로 추가된 파일(추적되지 않은 파일)도 포함되도록 합니다.

편한점의 한 점.git stash -u은 것은그입니다.

  1. 목표를 달성하기 위한 가장 간단한(유일한) 단일 명령입니다.
  2. 만약 당신이 나중에 당신의 생각을 바꾼다면 당신은 당신의 모든 일을 돌려받을 것입니다.git stash pop할 수 하는 것과

질문에 는 당의다질에대하여문른신대▁as여하▁of▁your에.git reset --hard되지 않은 을▁the▁need▁▁would▁so▁still필합요▁you▁the여'ed추track전이 필요합니다.git clean -f하지만git stash -u가장 편리할 것 같습니다.

로컬 변경사항을 전혀 유지하고 싶지 않은 경우.

git reset --hard

이 명령을 실행하면 로컬 리포지토리에서 모든 로컬 변경 내용이 완전히 제거됩니다.이 방법은 로컬 변경사항을 전혀 유지하지 않으려는 경우에만 풀 명령 중 충돌을 방지하는 가장 좋은 방법입니다.

로컬 변경사항을 유지할 때

원격에서 새 변경사항을 풀링하고 이 풀링 중에 로컬 변경사항을 무시하려면,

git stash

모든 로컬 변경사항을 저장합니다. 이제 원격 변경사항을 풀 수 있습니다.

git pull

이제 로컬 변경사항을 가져올 수 있습니다.

git stash pop

제 생각에 깃은 명확하게 문서화되지 않은 한 가지를 가지고 있습니다.저는 그것이 실제로 무시되었다고 생각합니다.

git checkout .

야, 네가 날 구했어요저는 항상 수정된 코드를 사용하여 해보고 싶은 것들이 있습니다.그러나 수정된 코드를 엉망으로 만들고 추적되지 않은 새로운 파일을 추가하는 등의 결과를 초래할 수 있습니다.그래서 제가 하고 싶은 일은, 제가 원하는 것을 무대에 올리고, 지저분한 것들을 하고, 빠르게 청소하고, 제가 행복하다면 하는 것입니다.

git clean -fd추적되지 않은 파일에 적합합니다.

그리고나서git reset단순히 스테이징을 제거합니다.git checkout를 사용하는이상적인 것은 .파일을 하나씩 지정하거나 디렉토리를 사용하는 것이 항상 이상적인 것은 아닙니다.삭제하려는 변경된 파일이 보관하려는 디렉토리 내에 있을 수 있습니다.단계별 변경사항을 제거할 수 있는 하나의 명령어가 필요합니다. 여기 있습니다.감사해요.

하지만 난 그들이 그냥git checkout옵션 없이 모든 준비되지 않은 변경 사항을 제거하고 준비된 변경 사항을 만지지 마십시오.그것은 일종의 모듈식이고 직관적입니다.무엇에 더 가깝습니다.git reset 다한.git clean또한 동일한 작업을 수행해야 합니다.

사용:

git checkout -- <file>

작업 디렉토리의 변경 내용을 취소합니다.

가장 좋은 방법은 변경 사항을 확인하는 것입니다.

project-name이라는 프로젝트에서 pom.xml 파일을 변경하면 다음 작업을 수행할 수 있습니다.

git status

# modified:   project-name/pom.xml

git checkout project-name/pom.xml
git checkout master

# Checking out files: 100% (491/491), done.
# Branch master set up to track remote branch master from origin.
# Switched to a new branch 'master'

저장하고 싶은 모든 것을 폐기하는 것은 모든 것을 폐기하는 가장 빠른 방법입니다. 특히 여러 저장소 간에 작업하는 경우에는 더욱 그렇습니다.

모든 내용이 됩니다.{0}키를 누르고 즉시 에서 삭제{0}

git stash && git stash drop

우선 중요한 변경사항이 저장되었는지 여부를 확인합니다.

git 상태

시도보다

git reset --hard

분기를 기본값으로 재설정합니다.

하지만 실행 취소가 필요하다면,

$ froz filfre$ $ reset (1) $ git froz.c filfre.c $ mailx (2) $ git
$ gitinfo..com/ $ git pull git://info.example.com/ nitfol.


더 읽어보기 >> https://git-scm.com/docs/git-reset

옵션 1: 추적 및 추적되지 않은 파일 변경 내용 삭제

준비된 파일과 준비되지 않은 파일 모두에 대한 변경 내용을 취소합니다.

$ git reset --hard [HEAD]

그런 다음 추적되지 않은 파일을 모두 삭제(또는 제거)합니다.

$ git clean [-f]

옵션 2: 저장

먼저 변경 내용을 저장할 수 있습니다.

$ git stash

그런 다음 원하는 작업에 따라 드롭하거나 팝합니다.https://git-scm.com/docs/git-stash#_synopsis 을 참조하십시오.

옵션 3: 수동으로 파일을 원래 상태로 복원

먼저 목표 지점으로 전환합니다.

$ git checkout <branch-name>

변경 사항이 있는 모든 파일 나열

$ git status

각 파일을 수동으로 원래 상태로 복원

$ git restore <file-path>

언급URL : https://stackoverflow.com/questions/22620393/various-ways-to-remove-local-git-changes

반응형