簡體   English   中英

如何在Git Push中修改文件?

[英]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-indexgit diff-files plumbing命令。 這些使您可以將提交的內容與索引的內容進行比較,或者將提交的內容與工作樹的內容進行比較,或者將提交的內容與工作樹的索引進行比較。

提交,索引和工作樹

請記住,Git始終具有每個文件的三個活動副本:

  • 可以通過git show HEAD: path獲得HEAD提交中的凍結副本。
  • 工作樹副本是您可以查看和編輯的普通文件。 Git並沒有真正使用此文件!
  • 在這兩個副本之間,Git保留文件的副本,該副本將放入您下一次提交的文件中。 該副本位於Git所謂的索引暫存區緩存中 您可以使用git show : path查看此副本。

當你運行git commit ,Git的封裝了無論是在指數權的話 ,並凍結這些內容,以使新提交的快照。 這就是為什么您必須經常運行git add原因。 git add命令將某些工作樹文件的內容復制索引中,以更新甚至創建索引版本。

對Git而言,這是文件的索引版本。 提交的版本將凍結為提交,無法更改。 只要提交持續,它們就會持續。 每個文件的工作樹版本都是您可以查看和使用的版本,但不是Git關心的版本。 每個文件的索引版本是Git進行新提交所需要的文件-進行新提交是Git存在的原因,因此Git關心提交索引

工作樹適合您。 Git不需要任何東西。 Git進行新提交需要與您一起使用和導入,並進行復制以更新索引。

摘要:提交是快照; diff比較快照

所有這一切都是Git制作快照的方式以及原因。 Git不處理任何更改。 它制作快照。 您可以隨時比較兩個快照,以查看它們之間的區別。 您看到的內容取決於選擇的兩個快照。

您還可以將快照(提交)與建議的快照(索引)進行比較,或者將快照與工作樹進行比較,或者將建議的快照(索引)與工作樹進行比較。 git diff-tree命令僅比較實際快照。 要獲得其他比較,您需要使用其他水暖命令之一或瓷器git diff

git status命令還會為您運行git diff 當您使用git status ,它實際上運行兩個這樣的差異。 一個將當前快照HEAD與索引進行比較,並與提議的提交進行比較。 這是為提交而進行的更改的來源。 第二個比較將索引與工作樹進行比較。 這是未進行提交的更改的來源。 索引和工作樹都沒有任何實際更改; git statusgit diff顯示的更改是比較實際快照(提交),建議快照(索引)或潛在快照(工作樹)的結果。

您可以使用以下內容:

git diff --name-only $GIT_PREVIOUS_COMMIT $GIT_COMMIT

或者有在詹金斯的功能變更可以使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM