diff --git a/README_ja.md b/README_ja.md index 685f5a8..c98757e 100644 --- a/README_ja.md +++ b/README_ja.md @@ -1299,9 +1299,8 @@ origin/HEAD set to master ### リベースやマージを取り消したい -現在のブランチを間違ったブランチにリベースないしマージしてしまった、あるいはリベースないしマージが出来なさそうと気づいたとしましょう。 +現在のブランチを間違ったブランチにリベースないしマージしてしまった、あるいはリベースないしマージができなさそうだと気づいたとしましょう。 Git は危険な操作の前に HEAD が指すものを変数 `ORIG_HEAD` に保存しているので、ブランチをリベースないしマージの前の状態に差し戻すのは簡単です。 - ```sh (my-branch)$ git reset --hard ORIG_HEAD @@ -1310,14 +1309,13 @@ Git は危険な操作の前に HEAD が指すものを変数 `ORIG_HEAD` に保 ### リベースしたが、強制プッシュはしたくない -残念ながら、編集内容をリモートブランチに反映させるには強制プッシュをする必要があります。編集履歴を変えてしまったからです。 -強制プッシュしない限りリモートブランチは編集内容を受け付けません。 +残念ながら、編集をリモートブランチに反映させるには強制プッシュをする必要があります。 +編集履歴を変えてしまったからです。 +強制プッシュしない限り、リモートブランチは編集内容を受け付けません。 これが多くの人がリベースワークフローではなくマージワークフローを使う主な理由です。 -特に大規模な開発チームは誰かの強制プッシュでハマりやすいです。 +特に大規模な開発チームは強制プッシュでハマりやすいです。 リベースの強制プッシュは注意して使いましょう。 -リベースを使う安全な方法は、リモートには編集内容を反映させず、代わりに次を実行することです: - - +リベースの安全な使い方は、リモートには編集内容を反映させずに、代わりに次を実行することです。 ```sh (master)$ git checkout my-branch @@ -1331,33 +1329,30 @@ Git は危険な操作の前に HEAD が指すものを変数 `ORIG_HEAD` に保 ### コミットを統合したい -`master` ブランチにプルリクエストを送る、またはこれから送るつもりのブランチで作業しているとしましょう。 -最も単純なケースとして、タイムスタンプを気にせず**全部の**コミットを一つにまとめてしまいたいとします。この場合はリセットと再コミットを行います。 -マスターブランチが最新版で、編集内容がすべてコミットされていることを確認した上で、次を実行します: - - +`master` ブランチにプルリクエストを送る、あるいはこれから送るつもりのブランチで作業しているとします。 +最も単純なケースとして、タイムスタンプを気にせずコミット**全部**を一つにまとめたいとします。 +この場合はリセットと再コミットを行います。 +マスターブランチが最新版で、編集内容がすべてコミットされていることを確認した上で、次を実行してください。 ```sh (my-branch)$ git reset --soft master (my-branch)$ git commit -am "New awesome feature" ``` -もっと細かく設定し、タイムスタンプも残したい場合は、対話的リベースと呼ばれるものを使うます: - +もっと細かく設定し、タイムスタンプも残したい場合は、対話的リベースを使います。 ```sh (my-branch)$ git rebase -i master ``` -別のブランチで作業しているわけではない場合は、`HEAD` に対してリベースする必要があります。たとえば直近二件のコミットを圧縮 (squash) したい場合は `HEAD~2`、直近三件なら `HEAD~3` です。 - +別のブランチで作業しているわけではない場合、`HEAD` に対してリベースする必要があります。 +たとえば直近二件のコミットを圧縮 (squash) したい場合は `HEAD~2`、直近三件なら `HEAD~3` です。 ```sh (master)$ git rebase -i HEAD~2 ``` -対話的リベースのコマンドを実行したら、テキストエディタに次のように表示されます: - +対話的リベースのコマンドを実行したら、テキストエディタに次のように表示されます。 ```vim pick a9c8a1d Some refactoring @@ -1386,11 +1381,10 @@ pick e3851e8 another fix ここで `#` から始まる行はコメントなので、リベースに影響しません。 -`pick` コマンドをリストにある好きなコマンドで置き換えればよいです。行を削除すればコミットを削除できます。 - +コマンド `pick` をリストの好きなコマンドで書きかえればよいです。 +行を削除すればコミットを削除できます。 -例えば、**一番古い(一番目の)コミットはそのまま残し、他のコミット全てを二番目のコミットに統合したい**場合は、最初と二番目のコミット以外のコミットの横に表示された文字を例えば `f` に修正します: - +例えば、**一番古い(一番目の)コミットはそのまま残し、他のコミット全てを二番目のコミットに統合したい**場合は、最初と二番目以外のコミットの横の文字を `f` に書きかえます。 ```vim pick a9c8a1d Some refactoring @@ -1399,8 +1393,7 @@ f b729ad5 fixup f e3851e8 another fix ``` -コミットを統合し、**さらに名前も変更したい**場合は、二番目のコミットの横にさらに `r` の文字を追加するか、あるいは単に `f` の代わりに `s` を使います: - +コミットを統合し、**さらに名前も変更したい**場合は、二番目のコミットの横にさらに `r` の文字を追加するか、あるいは単に `f` の代わりに `s` を使います。 ```vim pick a9c8a1d Some refactoring @@ -1410,7 +1403,6 @@ s e3851e8 another fix ``` するとテキストエディタが起動し、コミットの名前を変更できます。 - ```vim Newer, awesomer features @@ -1426,8 +1418,7 @@ Newer, awesomer features ``` -うまくいくと次のように表示されるはずです: - +うまくいくと次のように表示されるはずです。 ```sh (master)$ Successfully rebased and updated refs/heads/master. @@ -1435,14 +1426,14 @@ Newer, awesomer features #### 安全なマージの方法 -`--no-commit` performs the merge but pretends the merge failed and does not autocommit, giving the user a chance to inspect and further tweak the merge result before committing. `no-ff` maintains evidence that a feature branch once existed, keeping project history consistent. +オプション `--no-commit` を指定すると、マージを実行しつつ、あたかもマージが失敗したかのように扱って自動コミットはしません。 +これにより、コミットの前にマージの結果を精査したり調整できます。 +オプション `--no-ff` はフィーチャーブランチが存在したことを記録に残しておき、プロジェクト履歴の一貫性を保ちます。 ```sh (master)$ git merge --no-ff --no-commit my-branch ``` -オプション `--no-commit` を指定すると、マージを実行しつつ、あたかもマージが失敗したかのように扱って自動コミットはしません。これにより、コミットの前にマージの結果を精査したり調整できます。オプション `no-ff` はフィーチャーブランチが存在したことを記録しておき、プロジェクト履歴の一貫性を保ちます。 - #### ブランチを一つのコミットにまとめたい場合 ```sh @@ -1452,56 +1443,49 @@ Newer, awesomer features #### プッシュされていないコミットのみを統合したい場合 -進行中の作業に関するコミットがいくつかあって、upstream にコミットする前に統合しておきたいことがあるでしょう。 +進行中の作業に関するコミットがいくつかあって、upstream にコミットする前に統合しておきたいとします。 すでに upstream にプッシュされたコミットは、誰かがそれを参照するコミットをしている可能性があるので、それは統合しないでおきたいとします。 - ```sh (master)$ git rebase -i @{u} ``` -上を実行すると対話的リベースが始まりますが、一覧にはまだプッシュされていないコミットだけが表示されます。これで順番を入れ替えたり、修正したり、圧縮 (squash) したりしても安全です。 - +上を実行すると対話的リベースが始まりますが、一覧にはまだプッシュされていないコミットだけが表示されます。 +これで順番を入れ替えたり、修正したり、圧縮 (squash) したりしても安全です。 #### マージを中止したい マージがファイルに問題をきたすことがあります。 こういうときはオプション `abort` を使うとコンフリクト解消の作業を中止し、マージの前の状態の復元を試みることができます。 - ```sh (my-branch)$ git merge --abort ``` -ただし、このコマンドが使えるのはバージョン 1.7.4 以上の Git です。 - +ただし、このコマンドが使えるのはバージョン 1.7.4 以上の Git に限ります。 ### ブランチの親コミットを更新したい マスターブランチとそこから分岐した feature-1 ブランチがあり、feature-1 からさらに分岐した feature-2 ブランチがあるとします。 -今 feature-1 ブランチにコミットしたとすると、feature-2 ブランチの親コミットはもはや正確ではありません(feature-1 から分岐したので、親コミットは feature-1 ブランチの head であるべきです。) +いま feature-1 ブランチにコミットしたとすると、feature-2 ブランチの親コミットはもはや正確ではありません(feature-1 から分岐したので、親コミットは feature-1 ブランチの head であるべきです。) こういうときは `git rebase --onto` で修正できます。 - ```sh (feature-2)$ git rebase --onto feature-1 feature-2 ``` まだマージされていないブランチからフィーチャーブランチを分岐させており、feature-1 ブランチのバグ修正を feature-2 に反映させたいときに便利です。 - ### ブランチの全コミットがマージされているか確認する -ブランチの全てのコミットが別のブランチにマージされたか確認するには、それぞれのブランチの head(あるいは任意のコミット)の間の差分を表示します: - +ブランチの全コミットが別のブランチにマージされているか確認するには、それぞれのブランチの head(あるいは任意のコミット)の間の差分を表示します。 ```sh (master)$ git log --graph --left-right --cherry-pick --oneline HEAD...feature/120-on-scroll ``` -一方のブランチにしかないコミットがあるか表示され、ブランチの間で共有されていないコミットの一覧がわかります。 -もう一つの方法は: - +一方のブランチにしかないコミットがあるか表示され、ブランチ間で共有されていないコミットの一覧がわかります。 +もう一つの方法は次の通りです。 ```sh (master)$ git log master ^feature/120-on-scroll --no-merges @@ -1512,26 +1496,24 @@ Newer, awesomer features #### リベース編集画面に 'noop' と表示される -次のように表示されたとします: +次のように表示された場合です。 ``` noop ``` -これは、同じコミットのブランチ、あるいは現在のブランチよりも*先*にあるブランチに対してリベースしようとしたときに表示されるものです。こういう場合は: - +これは、同じコミットのブランチ、あるいは現在のブランチよりも*先*にあるブランチに対してリベースしようとしたときに表示されます。 +この場合は、 -* マスターブランチが正しい場所にあることを確認してください。 -* `HEAD~2` あるいはより以前にリベースしてください。 +* マスターブランチが正しい場所にあることを確認してください。 +* `HEAD~2` あるいはより以前にリベースしてください。 #### コンフリクトがあった リベースができないときは、解消すべきコンフリクトがあるかもしれません。 - -まず `git status` で、どのファイルがコンフリクトを起こしているか確認します: - +まず `git status` で、どのファイルがコンフリクトを起こしているか確認します。 ```sh (my-branch)$ git status @@ -1543,8 +1525,8 @@ Changes not staged for commit: both modified: README.md ``` -この例では `README.md` がコンフリクトをきたしています。ファイルを開き、次のようになっている部分を見てみましょう: - +この例では `README.md` にコンフリクトがあります。 +ファイルを開き、次のようになっている箇所を見てみましょう。 ```vim <<<<<<< HEAD @@ -1554,28 +1536,24 @@ Changes not staged for commit: >>>>>>> new-commit ``` -`HEAD` と新しいコミットで加えられたコードの間の差分(この例では、真ん中の行から `new-commit` までの間にあるコード)を解消する必要があります。 - +`HEAD` と新しいコミットで加えられたコードの間の差分(この例では、真ん中の行から `new-commit` の間にあるコード)を解消する必要があります。 一方のブランチの版のコードを残したい場合は、`--ours` あるいは `--theirs` を指定します。 - ```sh (master*)$ git checkout --ours README.md ``` - *マージする*場合、ローカルブランチの編集内容を残したいとき `--ours` を指定し、他方の編集内容を残したいとき `--theirs` を指定します。 -- *リベースする*場合、ローカルブランチの編集内容を残したいとき `--theirs` を指定し、他方の編集内容を残したいとき `--ours` を指定します。このように逆転する理由は[Git ドキュメントのこのノート](https://git-scm.com/docs/git-rebase#git-rebase---merge)を参照してください。 +- *リベースする*場合、ローカルブランチの編集内容を残したいとき `--theirs` を指定し、他方の編集内容を残したいとき `--ours` を指定します。このように逆転する理由は[ Git ドキュメントのこのノート](https://git-scm.com/docs/git-rebase#git-rebase---merge)を参照してください。 -マージがもっと複雑な場合はヴィジュアル差分エディタを使うことができます: - +マージがもっと複雑なときは、ビジュアル差分エディタを使うとよいです。 ```sh (master*)$ git mergetool -t opendiff ``` コンフリクトを全て解消し、コードのテストが済んだら、`git add ` で編集内容をステージし、`git rebase --continue` でリベースを再開します。 - ```sh (my-branch)$ git add README.md @@ -1583,10 +1561,8 @@ Changes not staged for commit: ``` コンフリクトを解消した結果、ワーキングツリーがコミット前と全く同じ状態になった場合は、代わりに `git rebase --skip` を実行します。 - -リベース作業を全て中止し、ブランチを元の状態に差し戻したい場合は、次のようにします: - +リベース作業を全て中止し、ブランチを元の状態に差し戻したい場合は、次を実行します。 ```sh (my-branch)$ git rebase --abort