如何將單個文件的版本從一個git分支複製到另外一個git分支?

我有兩個徹底合併的分支。 php

可是,在完成合並以後,我意識到一個文件已經被合併搞砸了(其餘人作了自動格式化,gah),而且更容易在另外一個分支中更改成新版本,而且而後從新插入個人一行更改後將其帶入個人分支。 git

那麼git中最簡單的方法是什麼呢? app


#1樓

使用checkout命令怎麼樣: spa

git diff --stat "$branch"
  git checkout --merge "$branch" "$file"
  git diff --stat "$branch"

#2樓

根據madlep的回答,您還可使用目錄blob從另外一個分支複製一個目錄。 code

git checkout other-branch app/**

至於op的問題,若是你只改變了那裏的一個文件,這將很好地工做^ _ ^ rem


#3樓

從您但願文件結束的分支運行此命令: get

git checkout otherbranch myfile.txt

通用公式: hash

git checkout <commit_hash> <relative_path_to_file_or_dir>
git checkout <remote_name>/<branch_name> <file_or_dir>

一些說明(來自評論): it

  • 使用提交哈希,您能夠從任何提交中提取文件
  • 這適用於文件和目錄
  • 覆蓋文件myfile.txtmydir
  • 通配符不起做用,但相對路徑可行
  • 能夠指定多個路徑

替代: io

git show commit_id:path/to/file > path/to/file

#4樓

1)確保您在須要文件副本的分支機構中。 例如:我想在master中使用子分支文件,所以你須要簽出或者應該在master git checkout master

2)如今單獨檢查你想要從子分支到master的特定文件,

git checkout sub_branch file_path/my_file.ext

這裏的sub_branch表示你有文件後跟你須要複製的文件名。


#5樓

請注意,在接受的答案,第一個選項階段 ,從(像其餘分支整個文件git add ...已執行),而第二個選項只是致使複製該文件,但沒有舞臺的變化(就好像你剛剛手動編輯了文件而且有很大差別)。

從另外一個分支Git複製文件而不進行分段

階段性變化 (例如git add filename)

$ git checkout directory/somefile.php feature-B

$ git status
On branch feature-A
Your branch is up-to-date with 'origin/feature-A'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   directory/somefile.php

未完成的變動 (未上演或已提交):

$ git show feature-B:directory/somefile.php > directory/somefile.php

$ git status
On branch feature-A
Your branch is up-to-date with 'origin/feature-A'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   directory/somefile.php

no changes added to commit (use "git add" and/or "git commit -a")
相關文章
相關標籤/搜索