다시 아름다운 상태로 돌아가고 싶다면 (git 프로젝트)

8742 단어 GitCleanresetcheckout
git를 사용하면 변경을 취소하고 싶어서 자주 와요.
특히 튜닝이나 팩스를 할 때는 "아, 전에 제출하는 게 좋을 텐데..."이렇게 생각하는 일이 많다.
그때는 프로젝트가git관리였다면 취소하려고 했지만 git의 개념을 이해하지 못하면 "어? 여기서 사라진 거 아니야?git reset --?"때로는 이렇게 될 수도 있어.
이 글은 예를 들어 git checkout .,git reset --,git checkout .의 차이를 설명함으로써 충분히 이해하고자 한다.

Excuse


간단하니까 index tree 말은 안 할 거예요.
엄밀한 동작을 알고 싶은 사람은 여기서 읽는 것을 멈추고 원본 코드 m()를 찾으세요.m
https://github.com/git/git

git 관리 창고의 파일


git는 개념적으로도 로컬 창고만 사용하여 버전 관리를 할 수 있지만 보통github 등 원격 창고에서 분산 관리를 하는 데 많이 사용된다.
그래서 원격 창고로 밀어넣기 전의 파일 동작을 설명하고 싶습니다.

먼저 로컬 파일 저장 장치로 새 파일을 만듭니다(그림 왼쪽 아래).
$ touch new_file.txt

$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    new_file.txt

nothing added to commit but untracked files present (use "git add" to track)
이 파일은git에 의해 관리되지 않기 때문에 실행 git clean -f 을 실행하여 파일을 관문에 업로드해야 합니다.
$ git add new_file.txt

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   new_file.txt

이 단계의 문서는 준비상태라고 할 수 있으며 현지 창고로 확정하기 위해 실행git add한다.
$ git commit -m 'initial commit'
[master a0a2837] initial commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 new_file.txt

$ git status
On branch master
nothing to commit, working tree clean
따라서 로컬 창고가 제출되었습니다git commit.
이 파일에 새로운 수정을 추가해 보십시오.
$ echo "hello, world" >> new_file.txt

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   new_file.txt

no changes added to commit (use "git add" and/or "git commit -a")
new_file.txt의 상태는new_file.txt, 동시에modified라고 쓰여 있다.
즉, 이 업데이트는 로컬 파일 시스템에만 한정되어 창고에 아무런 변화가 없음을 나타낸다.
그래서 다시 Changes not staged for commitgit add.
$ git add new_file.txt

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   new_file.txt

$ git commit -m 'second commit'
[master ff64c20] second commit
 1 file changed, 1 insertion(+)

$ git status
On branch master
nothing to commit, working tree clean
이렇게 되면 로컬 창고에 변경 사항이 쓰여 있고 원격 창고git commit에 있으면 이 파일의 수정이 원격 창고에 반영됩니다.
$ git push
...(省略)
지금까지git의 기본 파일을 추가, 변경하는 절차였습니다.

관문 취소:git push


로컬 창고의 파일git reset -- 이후 수정을 취소할 때git add.
# 新しくファイルを追加
$ touch another_new_file.txt

# ファイルをステージ
$ git add another_new_file.txt

# 状態確認
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   another_new_file.txt

# => git にトラックされている

# 取り消し
$ git reset --

# 状態確認
$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    another_new_file.txt

nothing added to commit but untracked files present (use "git add" to track)

# => Untracked files になっている
엄밀히 말하면 git reset --는 지역 창고의 역사를 거슬러 올라가는 명령(※)이다.
그림에서 보듯이 중간축의 상하 방향에 대한 명령이라고 할 수 있다.
※ 더 엄밀히 말하면 index tree를 조작하라는 명령입니다.관심 있는 사람은 읽을 수 있다소스 코드.

로컬 파일 시스템 변경 취소:git reset


로컬 파일 시스템에서 수정된 파일을 취소하려면git checkout ..
# 状態確認
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   new_file.txt

no changes added to commit (use "git add" and/or "git commit -a")

# => コミットされていない変更がある

# 取り消し
$ git checkout .

# 状態確認
$ git status
On branch master
nothing to commit, working tree clean

# => 変更が取り消されている
그림에서 보듯이 왼쪽 축의 위아래 방향을 따라 전진하는 명령이라고 할 수 있다.
단, 대상은git가 관리하는 파일에만 한정됩니다.

새 파일 삭제:git checkkout.


git에서 관리하지 않은 모든 파일을 삭제하려면 git clean -f 을 사용하십시오.
# 状態確認
$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    another_new_file.txt

nothing added to commit but untracked files present (use "git add" to track)

# => ステージされていないファイルがある

# 取り消し
$ git clean -f
Removing another_new_file.txt

# 状態確認
$ git status
On branch master
nothing to commit, working tree clean

# => ステージされていないファイルは全てなくなっている
왼쪽 축의 위아래 방향을 따라 전진하라는 명령이기도 하다.
단, 대상은git에서 관리하지 않는 파일에만 한정됩니다.

끝말


이 세 가지 명령을 사용하면 시행 오류의 변경 사항을 초기화할 수 있습니다. 기억하면 유용합니다.
하지만 이 지령들이 습관이 되면 중요한 업데이트가 사라지기 때문에 과도하게 사용하지 않는 것이 좋다.
상관없는 말이지만 git clean -flsgs의 별명 등록에 익숙해졌어요.

좋은 웹페이지 즐겨찾기