aboutsummaryrefslogtreecommitdiff
path: root/docs/ja/newbs_git_resolving_merge_conflicts.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/ja/newbs_git_resolving_merge_conflicts.md')
-rw-r--r--docs/ja/newbs_git_resolving_merge_conflicts.md94
1 files changed, 94 insertions, 0 deletions
diff --git a/docs/ja/newbs_git_resolving_merge_conflicts.md b/docs/ja/newbs_git_resolving_merge_conflicts.md
new file mode 100644
index 000000000..f1096e52e
--- /dev/null
+++ b/docs/ja/newbs_git_resolving_merge_conflicts.md
@@ -0,0 +1,94 @@
1# マージの競合の解決
2
3<!---
4 grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
5 original document: adf4acf59:docs/newbs_git_resolving_merge_conflicts.md
6 git diff adf4acf59 HEAD docs/newbs_git_resolving_merge_conflicts.md | cat
7-->
8
9ブランチでの作業の完了に時間がかかる場合、他の人が行った変更が、プルリクエストを開いたときにブランチに加えた変更と競合することがあります。
10これは *マージの競合* と呼ばれ、複数の人が同じファイルの同じ部分を編集すると発生します。
11
12?> このドキュメントは [あなたのフォークの master ブランチ: 更新は頻繁に、コミットはしないこと](ja/newbs_git_using_your_master_branch.md) で詳述されている概念に基づいています。
13その概念に慣れていない場合は、まずそれを読んでから、ここに戻ってください。
14
15## 変更のリベース
16
17*リベース* は、コミット履歴のある時点で適用された変更を取得し、それらを元に戻し、次に同じ変更を別のポイントに適用する Git の方法です。
18マージの競合が発生した場合、ブランチをリベースして、ブランチを作成してから現在までに行われた変更を取得できます。
19
20開始するには、次を実行します:
21
22```
23git fetch upstream
24git rev-list --left-right --count HEAD...upstream/master
25```
26
27ここに入力された `git rev-list` コマンドは、現在のブランチと QMK の master ブランチで異なるコミットの数を返します。
28最初に `git fetch` を実行して、upstream リポジトリの現在の状態を表す refs があることを確認します。
29入力された `git rev-list` コマンドの出力は2つの数値を返します:
30
31```
32$ git rev-list --left-right --count HEAD...upstream/master
337 35
34```
35
36最初の数字は、現在のブランチが作成されてからのコミット数を表し、2番目の数字は、現在のブランチが作成されてから `upstream/master` に対して行われたコミットの数であり、したがって、現在のブランチに記録されていない変更です。
37
38現在のブランチと upstream リポジトリの両方の現在の状態がわかったので、リベース操作を開始できます:
39
40```
41git rebase upstream/master
42```
43
44これにより、Git は現在のブランチのコミットを取り消してから、QMK の master ブランチに対してコミットを再適用します。
45
46```
47$ git rebase upstream/master
48First, rewinding head to replay your work on top of it...
49Applying: Commit #1
50Using index info to reconstruct a base tree...
51M conflicting_file_1.txt
52Falling back to patching base and 3-way merge...
53Auto-merging conflicting_file_1.txt
54CONFLICT (content): Merge conflict in conflicting_file_1.txt
55error: Failed to merge in the changes.
56hint: Use 'git am --show-current-patch' to see the failed patch
57Patch failed at 0001 Commit #1
58
59Resolve all conflicts manually, mark them as resolved with
60"git add/rm <conflicted_files>", then run "git rebase --continue".
61You can instead skip this commit: run "git rebase --skip".
62To abort and get back to the state before "git rebase", run "git rebase --abort".
63```
64
65これにより、マージの競合があることがわかり、競合のあるファイルの名前が示されます。
66テキストエディタで競合するファイルを開くと、ファイルのどこかに次のような行があります:
67
68```
69<<<<<<< HEAD
70<p>For help with any issues, email us at support@webhost.us.</p>
71=======
72<p>Need help? Email support@webhost.us.</p>
73>>>>>>> Commit #1
74```
75
76行 `<<<<<<< HEAD` はマージ競合の始まりを示し、行 `>>>>>>> commit #1` は終了を示し、競合するセクションは `=======` で区切られます。
77`HEAD` 側の部分はファイルの QMK master バージョンからのものであり、コミットメッセージでマークされた部分は現在のブランチとコミットからのものです。
78
79Git はファイルの内容ではなく *ファイルへの変更* を直接追跡するため、Git がコミットの前にファイル内にあったテキストを見つけられない場合、ファイルの編集方法がわかりません。
80ファイルを再編集して、競合を解決します。
81変更を加えてから、ファイルを保存します。
82
83```
84<p>Need help? Email support@webhost.us.</p>
85```
86
87そしてコマンド実行:
88
89```
90git add conflicting_file_1.txt
91git rebase --continue
92```
93
94Git は、競合するファイルへの変更をログに記録し、ブランチのコミットが最後に達するまで適用し続けます。