我正在使用git並在master分支上工做。 該分支有一個名爲app.js
的文件。 html
我有一個experiment
分支,在其中進行了大量更改和大量提交。 如今,我但願將僅對app.js
進行的全部更改從experiment
轉移到master
分支。 java
我怎麼作? git
再一次,我不想合併。 我只想將app.js
全部更改從experiment
分支帶到master
分支。 app
一切都簡單得多,爲此可使用git checkout。 ui
假設you're on master
分支上, app.js from new-feature
分支獲取app.js from new-feature
請執行如下操做: spa
git checkout new-feature path/to/app.js // note that there is no leading slash in the path!
這將爲您帶來所需文件的內容。 您能夠像往常同樣使用sha1的一部分而不是 新功能的 分支名稱來獲取文件,就像在特定提交中同樣。 rest
git checkout master # first get back to master git checkout experiment -- app.js # then copy the version of app.js # from branch "experiment"
另請參見git如何撤消對一個文件的更改? code
更新2019年8月,Git 2.23:使用新的git switch
和git restore
命令,將是: htm
git switch master git restore -s experiment -- app.js
默認狀況下,僅還原工做樹。
若是您還想更新索引(意味着還原文件內容, 並經過一個命令將其添加到索引中): 索引
git restore -s experiment --staged --worktree -- app.js # shorter: git restore -s experiment -WS -- app.js
正如雅庫布·納倫斯基(JakubNarębski )在評論中提到的那樣:
git show experiment:path/to/app.js > path/to/app.js
除SO問題「 如何從Git中的特定修訂版本檢索單個文件? 」中詳述的以外,該方法也能夠工做,您須要使用來自倉庫的根目錄的完整路徑。
所以,Jakub在他的示例中使用了path / to / app.js。
正如Frosty在評論中提到的那樣:
您只會獲得app.js的最新狀態
可是,對於git checkout
或git show
,您實際上能夠引用所需的任何修訂版,如SO問題「 git gui中文件的git checkout修訂版 」所示:
$ git show $REVISION:$FILENAME $ git checkout $REVISION -- $FILENAME
$ FILENAME是版本文件的完整路徑 ,將是相同的。
$REVISION
能夠如git rev-parse
:
experiment@{yesterday}:app.js # app.js as it was yesterday experiment^:app.js # app.js on the first commit parent experiment@{2}:app.js # app.js two commits ago
等等。
您也能夠從隱藏處執行此操做:
git checkout stash -- app.js若是您正在兩個分支上而且不想提交,這將很是有用。
補充VonC和chhh的答案。
git show experiment:path/to/relative/app.js > app.js # If your current working directory is relative than just use git show experiment:app.js > app.js
要麼
git checkout experiment -- app.js
或者,若是您但願來自另外一個分支的全部文件:
git checkout <branch name> -- .
git checkout branch_name file_name
例:
git checkout master App.java
若是您的分支機構名稱中包含句點,則此方法將無效。
git checkout "fix.june" alive.html error: pathspec 'fix.june' did not match any file(s) known to git.