추적되지 않은 파일에 git diff를 사용할 수 있습니까?
git diff에게 diff 출력에 추적되지 않은 파일을 포함하도록 요청할 수 있습니까? 또는 내가 만든 새 파일과 내가 편집 한 기존 파일을 추가하고 사용하는 것이 가장 좋습니다.
git diff --cached
?
최신 git 버전을 사용 git add -N
하면 파일 (또는 --intent-to-add
)을 사용하여 길이가 0 인 얼룩을 해당 위치의 인덱스에 추가 할 수 있습니다. 결론은 "추적되지 않은"파일이 이제이 길이가 0 인 파일에 모든 내용을 추가하기위한 수정이되어 "git diff"출력에 표시된다는 것입니다.
git diff
echo "this is a new file" > new.txt
git diff
git add -N new.txt
git diff
diff --git a/new.txt b/new.txt
index e69de29..3b2aed8 100644
--- a/new.txt
+++ b/new.txt
@@ -0,0 +1 @@
+this is a new file
안타깝게도 지적한 바와 같이 보류중인 파일 git stash
이있는 동안에는 할 수 없습니다 --intent-to-add
. 숨겨야 할 경우 새 파일을 추가 한 다음 숨겨야합니다. 또는 에뮬레이션 해결 방법을 사용할 수 있습니다.
git update-index --add --cacheinfo \
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 new.txt
(별명 설정은 여기의 친구입니다).
두 파일의 경로를 제공하여 색인 및 추적되지 않은 파일의 파일을 비교할 수 있다고 생각합니다.
git diff --no-index tracked_file untracked_file
대화 형 일일 gitting (작업 트리를 HEAD와 항상 비교하고 diff에 포함 된 추적되지 않은 파일을 갖고 싶은 경우) add -N/--intent-to-add
은 깨지기 때문에 사용할 수 없습니다 git stash
.
여기 내 git diff
교체품이 있습니다. 특히 깨끗한 솔루션은 아니지만 대화 형으로 만 사용하기 때문에 해킹으로도 괜찮습니다.
d() {
if test "$#" = 0; then
(
git diff --color
git ls-files --others --exclude-standard |
while read -r i; do git diff --color -- /dev/null "$i"; done
) | `git config --get core.pager`
else
git diff "$@"
fi
}
타이핑 d
하면 diff에 추적되지 않은 파일이 포함되며 (워크 플로에서 신경 쓰이는 d args...
것) regular과 같이 작동합니다 git diff
.
노트:
- 여기서는 실제로
git diff
개별 diff가 연결d
되어 있다는 사실을 사용하므로 추적되지 않은 모든 파일이 마지막으로 정렬된다는 사실을 제외하고는 "실제 diff" 의 출력 을 말할 수 없습니다 . - 이 기능의 유일한 문제점은 경로 재 지정된 경우에도 출력이 색상 화된다는 것입니다. 그러나 나는 그것에 대한 논리를 추가하기 위해 귀찮게 할 수 없습니다.
- 에 대한 매끄러운 인수 목록을 조합하여 추적되지 않은 파일을 얻는 방법을 찾을 수 없었습니다
git diff
. 누군가이 작업을 수행하는 방법을 알아 내거나git
나중에 기능이 추가 될 예정이라면 여기에 메모를 남겨주세요!
요점까지 100 %는 아니지만 어떤 이유로 든 허용되는 대답에서 제안한대로 파일을 색인에 추가하지 않으려는 경우 다른 옵션이 있습니다.
파일이 추적되지 않으면 diff는 전체 파일이므로 분명히 적은 수로 볼 수 있습니다.
less $(git ls-files --others --exclude-standard)
와 그들 사이를 탐색 :n
하고 :p
다음 및 이전을위한 ..
주석에서 업데이트 : 패치 형식이 필요한 경우 다음과 결합 할 수도 있습니다 git diff
.
git ls-files --others --exclude-standard | xargs -n 1 git --no-pager diff /dev/null | less
이 경우 출력을 파일로 리디렉션하거나 다른 diff 명령을 사용할 수도 있습니다.
git add -A
git diff HEAD
필요한 경우 패치를 생성 한 후 다음을 수행하십시오.
git reset HEAD
이 명령으로 스테이징 및 비 스테이징 된 경우 변경이 작동합니다. 준비되면 새 파일이 작동합니다.
$ git diff HEAD
준비되지 않은 경우 파일 차이 만 표시됩니다.
이것은 나를 위해 작동합니다 :
git add my_file.txt
git diff --cached my_file.txt
git reset my_file.txt
마지막 단계는 선택 사항이며 파일을 이전 상태로 유지합니다 (추적되지 않음)
패치를 작성하는 경우에도 유용합니다.
git diff --cached my_file.txt > my_file-patch.patch
한 파일의 경우 :
git diff --no-index /dev/null new_file
모든 새 파일의 경우 :
for next in $( git ls-files --others --exclude-standard ) ; do git --no-pager diff --no-index /dev/null $next; done;
별명으로 :
alias gdnew="for next in \$( git ls-files --others --exclude-standard ) ; do git --no-pager diff --no-index /dev/null \$next; done;"
하나의 명령으로 결합 된 모든 수정 및 새 파일의 경우 :
{ git --no-pager diff; gdnew }
일반적으로 원격 위치 팀과 작업 할 때 git stages untrack-> staged-> commit을 수행하기 전에 bash 스크립트를 작성하기 전에 동일한 파일에서 다른 팀이 수행 한 변경 사항에 대해 사전 지식이 있어야합니다. 원격 팀과의 불필요한 병합 병합 충돌을 피하거나 새로운 로컬 지점을 만들고 주요 지점에서 비교 및 병합하도록 도와줍니다.
#set -x
branchname=`git branch | grep -F '*' | awk '{print $2}'`
echo $branchname
git fetch origin ${branchname}
for file in `git status | grep "modified" | awk "{print $2}" `
do
echo "PLEASE CHECK OUT GIT DIFF FOR "$file
git difftool FETCH_HEAD $file ;
done
위의 스크립트에서 나는 원격 메인 브랜치 (마스터 브랜치가 필요하지 않음)를 FETCH_HEAD로 가져 와서 수정 된 파일의 목록 만 만들고 수정 된 파일을 git difftool과 비교합니다.
여기에 git에서 지원하는 많은 difftool이 있으며, GUI 비교를 위해 'Meld Diff Viewer'를 구성합니다.
로컬 커밋이 없다고 가정하면
git diff origin/master
참고 URL : https://stackoverflow.com/questions/855767/can-i-use-git-diff-on-untracked-files
'Programing' 카테고리의 다른 글
연결이 닫힌 후에도 JDBC 결과 세트와 명령문을 별도로 닫아야합니까? (0) | 2020.04.12 |
---|---|
PostgreSQL에서 UPSERT (MERGE, INSERT ... ON DUPLICATE UPDATE)하는 방법은 무엇입니까? (0) | 2020.04.12 |
JWT를 해독 할 수 있다면 어떻게 안전합니까? (0) | 2020.04.12 |
Base64를 사용하는 이유는 무엇입니까? (0) | 2020.04.12 |
MySQL 한 테이블과 다른 테이블에서 모든 열을 선택하십시오. (0) | 2020.04.12 |