5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

三重大学 計算研Advent Calendar 2019

Day 23

個人的 Gitの便利な機能

Last updated at Posted at 2019-12-22

はじめに

本記事は、三重大学 計算研 Advent Calendar 2019 23日目です。
Gitを個人で普段使いするときに便利だなと思っている機能を3つ紹介します。
共同開発をしているときはむやみやたらに使用しないことをおすすめします。

この記事では、次の3つの方法を扱います。

  • merge時にlogをキレイに保つ方法
  • 直前のcommitの簡単な修正方法
  • GitHub等のremoteブランチの削除方法

merge時にlogをキレイに保つ方法

新機能を追加するときは、masterブランチ以外(例えばfeatureブランチ)で作業を行うのが一般的です。
通常、featureブランチで新機能の実装を行った後、masterブランチにmergeします。
しかし、何も考えずにmergeしてしまうと、masterブランチに実装時の細かなcommitが追加され、ログが読みづらくなってしまいます。
そんなときに便利な機能がsquashです。

merge時にsquashを指定すると、次のようにmergeするcommitを1つにまとめてmasterブランチのlogをキレイに保てます。

例)squashを使用した場合のmasterブランチのlog
<BEFORE>
- ...
- 新機能〇〇用関数 new_feature() を追加。
- new_feature() にエラー処理を追加。
- new_feature() の型を修正。
- new_feature() にコメントを追加。
- new_feature() のコメントを修正。
- new_feature() の変数名を変更。
- new_feature() のコメントを修正。
- ...

<AFTER>
- ...
- 〇〇をする機能を追加。
- ...

squashを使うには、merge時に--squashを指定します。

例)squashを使ってfeatureブランチをmergeする方法
[ブランチ名を確認]
$ git branch
  feature
* master
 
[merge時にsquashを指定]
$ git merge --squash feature
Updating b1e991e..df95b90
Fast-forward
Squash commit -- not updating HEAD
 new_feature.c | 16 ++++++++++++++++
 README        |  5 +++++
2 files changed, 21 insertions(+)
 create mode 100644 new_feature.c

[merge分をコメントを付けてcommit]
$ git commit -m "〇〇する機能を追加"
[master 563bc73] 〇〇する機能を追加
2 files changed, 21 insertions(+)
 create mode 100644 new_feature.c

今回紹介したのはmasterブランチ側でcommitをまとめる方法ですが、featureブランチ側でまとめる方法もあります。また、共同開発をしている場合はfeatureブランチ側で変更内容をまとめてからプルリクエストを送るほうが良いらしいです。

featureブランチ側でまとめる方法は 【git rebase -i】gitのcommitをまとめる で解説されています。

直前のcommitの簡単な修正方法

皆さんは、git commitをした直後に
 「あ、ミスったな」
って思ったことはありませんか?

amendというオプションを使うと、直前のcommitしなかったことにして改めてcommitし直すことが出来ます。

この機能を使えば、

  • 追加忘れのファイルの追加
  • コメントの誤字・脱字を修正
  • ファイル内の誤字・脱字を修正

などの作業を簡単に行なえます。

やり方は簡単で、commit時に--amendを付けるだけです。

例)amendを使ってコメントを修正
[修正する対象]
$ git commit -am "昨日書いたところにエラー処理を追加"
[master e1f21dc] 昨日書いたところにエラー処理を追加
 1 file changed, 20 insertions(+), 2 deletions(-)

[amendを使って直前のcommitを修正]
$ git commit -am "サーバ側が異常終了したときのエラー処理を追加" --amend
[master 3eb9d2c] サーバ側が異常終了したときのエラー処理を追加
 Date: Sat Dec 21 11:24:38 2019 +0900
 1 file changed, 20 insertions(+), 2 deletions(-)

--amendを付けるだけで、前半のcommitはしなかったことになり、後半のcommitに統合されました。commitしなかったことになるだけなので、作業内容は失われません。

GitHub等のremoteブランチの削除方法

ローカルで不要になったブランチを削除するには
 git branch -d <BRANCHNAME>
を実行します。

しかし、これだけではGitHub等の外部にあるブランチは残ったままになります。
そんなときにはgit push <REMOTENAME> :<BRANCHNAME>を実行します。
<REMOTENAME>はリモート名(下の例ではorigin)、<BRANCHNAME>は削除したいブランチの名前で置き換えてください。

例)GitHub側のtestingブランチを削除する方法
[remote名を確認]
$ git remote -v
origin github:AkiraHasegawa1997/hogefuga_project (fetch)
origin github:AkiraHasegawa1997/hogefuga_project (push)

[GitHub上のtestingブランチを削除]
$ git push origin :testing
To https://github.com/AkiraHasegawa1997/hogefuga_project.git
 - [deleted]         testing

このコマンドは、ブランチ名を空文字にリネームすることでブランチの削除をしています。
※注意:一度削除したら戻せません。

まとめ

今回は自分が個人用リポジトリでよく使うGitの機能を紹介しました。
この記事が少しでも役に立ったら幸いです。
ここまで読んでいただきありがとうございました。

参考

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?