完全にマージされた2つのブランチがあります。
しかし、マージが完了した後、1つのファイルがマージによって台無しにされていることがわかり(他の人が自動フォーマットを行った、gah)、もう一方のブランチで新しいバージョンに変更する方が簡単です。それから私のブランチに持っていった後に私の一行の変更を再挿入してください。
それでは、これを行うためのgitの最も簡単な方法は何ですか?
ファイルを配置したいブランチからこれを実行します。
git checkout otherbranch myfile.txt
一般式
git checkout <commit_hash> <relative_path_to_file_or_dir>
git checkout <remote_name>/<branch_name> <file_or_dir>
いくつかのメモ(コメントから):
myfile.txt
とmydir
を上書きします代替案
git show commit_id:path/to/file > path/to/file
私は同様の検索でこの質問にたどり着きました。私の場合は、ファイルを元の場所とは異なる別のブランチから現在の作業ディレクトリに抽出しようとしていました。 答え :
git show TREEISH:path/to/file >path/to/local/file
Checkoutコマンドの使い方はどうでしょうか。
git diff --stat "$branch"
git checkout --merge "$branch" "$file"
git diff --stat "$branch"
Madlepの答えに従って、ディレクトリblobを使って、あるディレクトリを別のブランチからコピーすることもできます。
git checkout other-branch app/**
あなたがそこで1つのファイルだけを変更したならば、opの質問に関してはこれはうまくいくでしょう^ _ ^
1)ファイルのコピーが必要な場所にいることを確認します。例えば:私はあなたがチェックアウトする必要があるか、マスターgit checkout master
でなければならないので、私はマスターにサブブランチファイルが欲しい
2)サブブランチからマスターに必要な特定のファイルのみをチェックアウトします。
git checkout sub_branch file_path/my_file.ext
ここでsub_branch
は、あなたがコピーする必要があるファイル名が後に続くあなたがそのファイルを持っている場所を意味します。
受け入れられた答えでは、最初のオプション Stage 他のブランチからのファイル全体(git add ...
が実行されたように)で、2番目のオプションは単にファイルをコピーするだけでステージングはしません。変更内容(あたかも手動でファイルを編集しただけで未解決の相違点があるかのように)。
ステージングせずに別のブランチから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")