추적되지 않은 파일에 gitdiff를 사용할 수 있습니까?
질문이 가능합니까?git diff
되지 않은 하거나, " 디출력에추지것않포는함하파을일다좋것가습이니장는또", "하사용프는되적은것좋▁in다▁to습"를 .git add
새로 만든 파일과 편집한 기존 파일에서 다음을 사용합니다.
git diff --cached
?
최신 Git 버전을 사용하면 다음을 수행할 수 있습니다.git add -N
파일)--intent-to-add
가 0인 이 추가됩니다을 클릭하면 해당 위치의 인덱스에 길이가 0인 블롭이 추가됩니다.결과적으로 "추적되지 않은" 파일이 이제 길이가 0인 파일에 모든 내용을 추가하기 위한 수정이 되고 "gitdiff" 출력에 표시됩니다.
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
100%는 아니지만 어떤 이유로든 수락된 답변에서 제안한 대로 인덱스에 파일을 추가하지 않으려면 다음과 같은 다른 옵션이 있습니다.
파일이 추적되지 않은 경우에는 파일 전체가 차이가 나는 것이 분명하므로 다음과 같이 적은 양으로 파일을 볼 수 있습니다.
less $(git ls-files --others --exclude-standard)
다음을 사용하여 둘 사이를 탐색합니다.:n
그리고.:p
다음과 이전..
주석에서 업데이트:패치 형식이 필요한 경우 다음과 결합할 수도 있습니다.git diff
:
git ls-files --others --exclude-standard -z | xargs -0 -n 1 git --no-pager diff /dev/null | less
이 경우 출력을 파일로 리디렉션하거나 다른 diff 명령을 사용할 수도 있습니다.
디프하고 디프에되지 않은 의, "헤드" (HEAD에 대해 추적되지 않은 파일이 포함되기를 원하는 경우).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한 부분) 및 Diff(Diff(Diff)에 합니다.d args...
할 것입니다.git diff
.
주의:
- 우리는 여기서 그 사실을 이용하고 있습니다.
git diff
정말로 개별적인 차이가 연관되어 있기 때문에, 그것을 말할 수 없습니다.d
"실제 diff" 출력 - 추적되지 않은 모든 파일이 마지막으로 정렬된다는 사실을 제외합니다. - 이 기능의 유일한 문제는 방향 수정을 해도 출력이 컬러화된다는 것입니다. 하지만 논리를 추가하는 것은 귀찮습니다.
- 저는 단지 교묘한 인수 목록을 조립하는 것만으로는 추적되지 않은 파일을 포함시킬 방법을 찾을 수 없었습니다.
git diff
누군가 이 작업을 수행하는 방법을 알아내거나 기능이 추가된 경우git
미래의 어느 시점에, 여기에 메모를 남겨주세요!
git add -A
git diff HEAD
필요한 경우 패치를 생성하고 다음을 수행합니다.
git reset HEAD
한 파일의 경우:
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 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
단계별 변경과 단계별 변경을 모두 수행하려면 다음을 추가합니다.HEAD
다음 명령으로:
$ git diff HEAD
새 파일을 스테이징하고 스테이징된 파일을 차등화할 수 있다는 아이디어를 사용하여 이 두 가지를 결합하여 차이를 확인할 수 있습니다.저는 사용하기 쉽다고 생각합니다.
디프를 확인할 파일을 추가합니다.이 경우 추적되지 않은 파일만 추가합니다.선택적으로 디프를 확인할 파일만 추가하도록 선택할 수 있습니다.
git stash && git add . && git stash pop
디프 스테이징
git diff --staged
필요한 경우 준비된 파일 재설정
git reset
위의 모든 것들을 종합하면,
git stash && git add . && git stash pop && git diff --staged && git reset
일반적으로 원격 위치 팀과 함께 작업할 때는 동일한 파일에서 다른 팀이 수행하는 변경 사항에 대해 사전에 알고 있어야 합니다.git stages untrack-->staged-->커밋을 수행하기 전에 원격 팀과의 병합 충돌을 불필요하게 해결하거나 새로운 로컬 분기를 만들고 메인 분기에서 비교 및 병합하는 데 도움이 되는 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가 내 수정된 파일 목록만 만들고 수정된 파일과 gitdiff 도구를 비교합니다.
여기서 많은 다양한 도구가 git에 의해 지원됩니다.GUI 비교가 잘 되도록 'Meld Diff Viewer'를 구성합니다.
사하여해를 이용한 git stash
:
# Stash unstaged changes
git stash --keep-index --include-untracked --message="pre-commit auto-stash"
git stash show --only-untracked stash@{0}
git stash pop
나는 이것이 사용되는 스크립트의 맥락에서 필요했습니다.git stash
(즉, 사전 커밋 후크).다음은 제 전체 작업 사례입니다.
# Stash unstaged changes
# NOTE: we always create a stash - possibly even a totally empty one.
git stash --keep-index --include-untracked --message="pre-commit auto-stash"
diffTracked=$(git diff --stat --staged stash@{0})
diffUntracked=$(git stash show --only-untracked stash@{0})
[[ $diffTracked || $diffUntracked ]] && {
echo "Stashed diff:"
# Ensure diffs have standard coloring:
git diff --stat --staged stash@{0}
git stash show --only-untracked stash@{0}
}
로컬 커밋이 없다고 가정하면,
git diff origin/master
언급URL : https://stackoverflow.com/questions/855767/can-i-use-git-diff-on-untracked-files
'programing' 카테고리의 다른 글
WooCommercommercommerce:고객 계정 페이지에 사용자 정의 템플릿 추가 (0) | 2023.06.21 |
---|---|
Excel VBA - 동적 배열 수식을 추가하는 방법 (0) | 2023.06.21 |
SQL에서 빈 GUID 확인 (0) | 2023.06.21 |
Mac OS X에서 libusb를 설정하는 방법은 무엇입니까? (0) | 2023.06.21 |
수동으로 값을 스와핑하지 않고 x축과 y축을 수행합니다. (0) | 2023.06.21 |