20190512のGitに関する記事は3件です。

1つのファイルを分割して、任意の範囲を git add したい

Gitでソースコードを管理していて、コミット履歴をきれいに保ちたいときってありますよね。

レビューをお願いするためであったり、変更履歴を理解しやすい形で残すためであったり、理由は様々ですが、意味のある塊でコミットを管理することはチーム開発において不可欠です。

既にソースコードを書き上げてしまったとき、どうすればコミットを分割できるかを、この記事では紹介していきます。

git add -p を使う

-p のオプションを付与するだけで、任意の範囲を add することができます。

$ git add -p <ファイル名>

すると、下図のような画面が開きます。

git_add_-p.png

hunk = '塊' です。

y を入力すれば、 +- が左端に記されている行が stage に登録されます。

n を入力すれば、何も起きません。

しかし、この塊は自動で認識されるみたいです。

そのため、より細かく git add したい場合は、 e を入力します。

任意の範囲を add する

先ほどの画面で、 e を選択すると、 vi エディタが立ち上がります。

git_add_-p_e.png

左端が + の場合は追加されたコード、左端が - の場合は削除されたコード、何もない場合は変更なしを表しています。

stageに登録したい箇所には変更を加えません。

登録したくない箇所は、 + の場合は行をまるごと削除 (viならば dd)、 - の場合は - を空白 に置換します。

選択が終われば保存し、いつも通り git commit します。

既に commit したコードを分割したい

該当箇所に rebase をかけて、 reset したのちに、 git add -p します。

$ git log --oneline -3
uptod8t 最新のコミット
tosplit 分割したいコミット
1before 分割したいコミットの1つ前

# 分割したいコミットで、 `pick` を `e` に変更して保存する。
$ git rebase -i 1before
e tosplit 分割したいコミット
pick uptod8t 最新のコミット

$ git reset HEAD~
Unstaged changes after reset:
M   main.py

$ git add -p main.py

これで、任意の箇所をstageに登録できるようになりました。

最後に

勢い余って、ソースコードをガリガリ書いた後に、分割してコミットしたいと思うことがあります。

そんなとき、なかなか git add -p を紹介してくれる記事がなかったので、書いてみました。

もし、さらに良い方法等があれば、コメントでご指摘いただけますと幸いです。

参考文献

https://git-scm.com/docs/git-add

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

知らないとヤバい!チーム開発で必要な【GitHub Flow】

はじめに

最近、プログラミングスクールが増えてきましたが、チーム開発の現場で必須のGithubの使い方を学べるところはまだ少ないんではないでしょうか?
趣味で個人アプリを開発する場合は、必要ありませんが有名なWEBサービスは、ほとんどがチーム開発です。そのチーム開発に必要な開発フローについてご紹介します。

目次

  • Githubのmasterブランチとその他ブランチ
  • ブランチをマージする
  • masterブランチは、常時デプロイできる状態にしておく

Githubのmasterブランチとその他ブランチ

masterブランチとは、最初にコミットをするとできるブランチです。複数人でアプリを開発する際は、このmasterブランチをクローン(コピー)してそれぞれのブランチで作業します。
そうすることによって、作業を細分化することもできますし、もしコードの書き間違いがあってもmasterブランチに影響がでないのでより効率的に開発を進めることができます。

ブランチをマージする

開発者がそれぞれのブランチで、開発ができてもその内容をmasterブランチにマージ(結合)しなければ反映されません。

masterブランチは、常時デプロイできる状態にしておく

ここまででmasterブランチとブランチがどのようなものかだいたい理解できたかと思います。
例えば、それぞれの開発者が、masterブランチにコミットしているとします。もしその開発コードにバグやエラーがあったら稼働中のWEBサービスが止まってしまいます。
それを防ぐためにそれぞれのブランチでコードに問題がないかなど確認した上でmasterブランチにマージします。

新たな作業をする時は、masterブランチから新しいブランチを作る

機能の追加やバグの修正ごとに新しくブランチを作成します。ここで重要なのですが、ブランチ名には「誰が見てもその作業がわかる」ようにします。

ブランチを定期的にpush(リモートリポジトリに反映させる)する

各開発者のローカル環境で作成したブランチでは、他の開発者がどのぐらい進んでいるかわからないため定期的にリモートリポジトリにプッシュしましょう。

プルリクエストでコミュニケーションをとる

プルリクエストは、差分を確認する機能やコードの行にコメントを入れられる機能があります。プルリクエストを使うことによって他の開発者からレビューをもらったりアドバイスをもらったりしてより効率的に開発を進めることができます。

FireShot Capture 104 - shinpei555_pet_docter - github.com.png
画像の【Pull requests】の部分になります。

他の開発者が確認・レビューが終わればmasterにマージする

ブランチでの作業が完了後に、プルリクエストを通して他の開発者からレビューをもらいます。他の開発者の目を通すことによって、ミスや思い込みによるバグがmasterブランチに混ざることを防ぐことができます。もし作業内容に問題があれば修正します。

marterにマージしたらすぐにデプロイする

masterブランチへのmergeが行われた時は,マージ直後に必ずmasterブランチの内容が正常にデプロイできるかどうかをチェックする必要があります。もしバグが混入していたとしても、バグの特定が早くなったり、git revertで該当のコミットを打ち消すなど迅速な対応が可能になります。

おわり

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AtomのGithubの連携においてNo Remotesが表示される問題

AtomのGitHubタブに何も表示されない、または'No Remotes'が表示される問題で行き詰った。

いろいろ調べたが具体的な方法が見つからなかったためその解決方法を共有する。

対象者

AtomでGitHubを使おうと思ってる人でAtomのGitHubタブにログインが表示されなくて困ってる人。

前提として、GitHubアカウント作成済み、AtomのGitタブでローカルリポジトリをつくれるとする。
<local repository作成前>
ローカルリポジトリ.PNG
<local repository作成後>
リポジトリ作成.PNG

状況

AtomのGitHubタブに何も表示されない、または'No Remotes'が表示されてしまう。

Googleで「Atom GitHub 連携」と検索してサイトを見回ったところ、どのサイトも
1. プロジェクトフォルダ作成
2. 適当なファイルを保存
3. Gitタブでローカルリポジトリ作成してコミット
4. GitHubタブでログインボタンが表示されるのでログイン → ????表示されない????
とあるが4つ目で行き詰まってしまった。

以下がその画面。
表示されない.PNG

解決方法

この方法は解決方法の1つに過ぎないことに留意してほしい。

その手順を簡単に示す。
4. GitHubタブでログインボタンが表示されるのでログイン → ????表示されない????
5. GitHub Desktopをインストールしてログインまでする
6. 'Add local repository'で作成したプロジェクトフォルダを選択して'Add repository'
7. 'Publish repository'でGitHub上でリポジトリを作成
8. GitHub Desktopの'Changes'タブでAtomを開く
9. GitHubとの連携が完了していることを確認

以下にその実行時の画面。

6. 'Add local repository'で作成したプロジェクトフォルダを選択して'Add repository'

gi desk push.PNG

7. 'Publish repository'でGitHub上でリポジトリを作成

push.PNG

8. GitHub Desktopの'Changes'タブでAtomを開く

atomでひらく.PNG

9. GitHubとの連携が完了していることを確認

アトムでできた.PNG

終わりに

どうやらAtomはリモートリポジトリをもつプロジェクトを読み込むことで自動的に連携を行っているらしい。

それを今回はGitHub Desktopというソフトを使って実行したが、他の方法としてコマンドでリモートリポジトリを作成するなどの方法がある。

またフォークしたプロジェクトを扱うならば、そのままAtomで連携できる。

以上、Git素人が躓いたことでした(●´ϖ`●)お役に立てたら幸いです。間違いがありましたら遠慮なくご指摘ください。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む