[英]How to get the files modified in a Git Push?
我想獲取上次推送中已修改的所有文件。
推送可以有多個提交。
目前,我可以通過以下命令獲取上次提交的修改文件:
git diff-tree --no-commit-id --name-only -r HEAD
你快到了 可以通過將當前的HEAD與origin分支進行比較來實現這一目標。 git diff-tree --no-commit-id --name-only -r HEAD..origin/master
git checkout master
git pull
touch addnewfile.txt
git add -A
git commit -am "added new empty file"
echo 'test' > addexistingfile.txt
git commit -am "added test in existing file"
git diff-tree --no-commit-id --name-only -r HEAD..origin/master
最后一條命令顯示輸出:
addnewfile.txt
addexistingfile.txt
git push
不會修改任何文件。
git push
添加或刪除提交 。 提交具有文件快照。 提交沒有更改,只有文件。
這是一個文件:
$ cat name-of-file
I am the contents of file name-of-file.
我對此文件做了哪些更改 ? 我給了您一個快照 ,我的問題是:進行了哪些更改? 我遺漏了哪些關鍵信息?
仔細考慮一下,然后繼續閱讀:給定兩個快照,您將如何找到更改? git diff
幫助嗎?
git diff
命令可以顯示兩個快照之間的變化 :
git diff <hash#1> <hash#2>
請注意,您必須選擇兩個提交哈希。 但是,您可以按name選擇那些提交哈希。 在一些現有的Git存儲庫中,運行:
git rev-parse master
並查看出現哪個提交哈希。 然后運行git log master
。 git rev-parse
的輸出和git log
的第一行之間有什么共同點?
gitrevisions文檔中提供了完整的(如果壓倒一切的)方式來生成Git哈希ID,但是對於日常工作而言,最有用的是分支名稱(例如master
,標簽名稱(例如v2.1
)和遠程跟蹤名稱(例如origin/master
。 該名HEAD
表示當前犯 ,1,您可以縮寫它@
如果你喜歡。
1名稱HEAD
也表示當前的分支名稱 。 Git決定使用HEAD
談論提交哈希ID還是談論分支名稱的方式是,某些命令需要分支名稱,而其他命令則需要提交哈希ID。 git rev-parse
命令可以詢問任何一個問題,但是默認值是查找哈希ID。 您可以使用git rev-parse --symbolic-full-name HEAD
詢問分支名稱,或者,如果您非常認真,可以在這種情況下使用git symbolic-ref HEAD
。
git diff-tree
是兩次提交的git diff
的管道版本 您標識的命令git diff-tree
是從另一台計算機程序運行git diff
一種方法。 如果您正在運行git diff
來自己查看差異,則通常會使用Git所謂的瓷器命令,該命令以更拋光,面向用戶的浴室部分(如水槽)命名。 如果您正在運行git diff
來獲取差異以饋送到另一個計算機程序,則可能需要在此過程中分解並重新組裝各種設備,執行Git所謂的plumbing ,在這里您將使用git diff-tree
比較兩個具體的提交。
git diff-tree
命令具有一個特殊的額外功能:如果僅使用一個提交哈希ID或名稱(如HEAD
解析為這樣的哈希ID來運行它,Git將從該提交中提取父提交列表。 然后,Git將比較提交的父對象與該提交。 這就是運行git diff-tree options HEAD
時看到的。
要選擇兩個提交進行比較,只需在命令行上使用兩個哈希ID或名稱即可。
git diff
也可以比較其他東西 瓷器git diff
命令可以代替git diff-tree
來調用git diff-index
或git diff-files
plumbing命令。 這些使您可以將提交的內容與索引的內容進行比較,或者將提交的內容與工作樹的內容進行比較,或者將提交的內容與工作樹的索引進行比較。
請記住,Git始終具有每個文件的三個活動副本:
git show HEAD: path
獲得HEAD
提交中的凍結副本。 git show : path
查看此副本。 當你運行git commit
,Git的封裝了無論是在指數權的話 ,並凍結這些內容,以使新提交的快照。 這就是為什么您必須經常運行git add
原因。 git add
命令將某些工作樹文件的內容復制到索引中,以更新甚至創建索引版本。
對Git而言,這是文件的索引版本。 提交的版本將凍結為提交,無法更改。 只要提交持續,它們就會持續。 每個文件的工作樹版本都是您可以查看和使用的版本,但不是Git關心的版本。 每個文件的索引版本是Git進行新提交所需要的文件-進行新提交是Git存在的原因,因此Git關心提交和索引 。
工作樹適合您。 Git不需要任何東西。 Git進行新提交需要與您一起使用和導入,並進行復制以更新索引。
所有這一切都是Git制作快照的方式以及原因。 Git不處理任何更改。 它制作快照。 您可以隨時比較兩個快照,以查看它們之間的區別。 您看到的內容取決於選擇的兩個快照。
您還可以將快照(提交)與建議的快照(索引)進行比較,或者將快照與工作樹進行比較,或者將建議的快照(索引)與工作樹進行比較。 git diff-tree
命令僅比較實際快照。 要獲得其他比較,您需要使用其他水暖命令之一或瓷器git diff
。
git status
命令還會為您運行git diff
。 當您使用git status
,它實際上運行兩個這樣的差異。 一個將當前快照HEAD
與索引進行比較,並與提議的提交進行比較。 這是為提交而進行的更改的來源。 第二個比較將索引與工作樹進行比較。 這是未進行提交的更改的來源。 索引和工作樹都沒有任何實際更改; git status
或git diff
顯示的更改是比較實際快照(提交),建議快照(索引)或潛在快照(工作樹)的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.