Help us understand the problem. What is going on with this article?

いきなりGit/GitHub(当方バージョン管理初心者でいきなりGit/GitHub!)

はじめに

孤独にアプリ開発をしてきたこの8年、ようやくチーム開発をすることになり、Gitを急遽勉強する必要が出てきたため、記事にしようと思いました。殴り書きベースになると思いますが、長い目で更新し、Gitチートシートにしていきたいと思ってます。

主なコマンド一覧

コマンド名 説明
status 現在のファイル更新状況を表示                
commit インデックスされたファイルをローカルリポジトリにコミットする
branch 現在のローカルブランチ一覧を表示する
checkout ファイルをチェックアウト、指定したブランチに移動
-b ブランチを作成
-1 ローカル/リモート ブランチ一覧を表示
--oneline リモートブランチ一覧を表示
diff ワーキングツリーとインデックスの差分を表示
--cached インデックスとHEADの差分を表示
fetch リモートリポジトリからデータを取得
--prune リモートリポジトリのブランチの差分を整理する
log ローカル履歴を表示
--oneline リモートリポジトリのアクション履歴一覧を表示
-p logの詳細
--graph --decorate --pretty=oneline --abbrev-commit 自分ツリー&リモートオリジンツリーを表示
--graph --decorate --pretty=oneline --abbrev-commit --all 自分ツリー&他人のツリー&リモートオリジンツリーを表示
ls-files git リポジトリのルートからのパスで表示
blame blame ファイル名 でファイルの変更履歴を表示。 --abbrev=数値 で文字数を指定できる

show

status + diff といったところか。

rebase

rebaseというコマンドは、様々な状況において使われるコマンドです。実践パターンが発生するごとに、随時追加していきたいと思います。

mv

Linuxのmv同様リネーム出来る、そのあとコミットは必要
逆に言えば、

手動でファイルを移動
git status
 > git add

を短縮できるってことでもあるような。

rm

#ファイルも一緒に削除したいとき
$ git rm [削除したいファイル]

#ディレクトリごと削除
$ git rm -r [削除したいディレクトリ]

#ファイルを残したいとき(.gitignoreにも追記する)
$ git rm --cached [削除したいファイル]

コマンド後、リポジトリに反映するためにコミット。

ローカルファイルを削除してしまった、やり直したい場合

最新のコミット(HEAD)からチェックアウトする

$ git checkout HEAD ファイル名

HEAD

HEADの種類

  • HEAD:現在チェックアウトされているブランチの最新コミット
  • FEACH_HEAD: 最後に取得したリモートブランチの最新コミット
  • ORIG_HEAD:元の状態を復元するためHEAD
  • MERGE_HEAD:マージ中のコミットが記録されるHEAD

リポジトリ名変更

$ git br -m 元ブランチのパス 新ブランチのパス  

//package.jsonに変更があった場合には
$ yarn

でライブラリをインストール

//git staで以前のバージョンに戻したい

$ git checkout ファイルパス

直前のコミットを上書きする

//push後、さらにソースを修正
$ git add 修正したソース
$ git ci --amend
$ git push --force origin ブランチ名

現在のリポジトリを、masterでリベースする

$ git fep
$ git checkout 書き換えたいブランチ
$ git rebase origin/master

//確認ができたら 強制プッシュ

$git push -f origin features/add-circle-ci-#18

コンフリクト系

(1)gitでブランチ切り替えようとしたらコンフリクト

$ git checkout [自分のbranch名]

エラー:
error: you need to resolve your current index first

$ git merge --abort

(2) git rebase 後に、元に戻す

エラー:

fatal: There is no merge to abort (MERGE_HEAD missing).

対応

$ git reflog
$ git reset --hard HEAD@{39}
$ git lola

無駄なコミットを削除する場合

$ git log --oneline
(ハッシュ1) (コメント1)
(ハッシュ2) (コメント2)
(ハッシュ3) (コメント3)
(省略)

//コメント1、2の履歴を削除する場合
$ git rebase -i (ハッシュ3)

pick (ハッシュ1) (コメント1)
pick (ハッシュ2) (コメント2)

↓変更
drop (ハッシュ1) (コメント1)
drop (ハッシュ2) (コメント2)
:wq

//プッシュでリモートリポジトリを書き換え
$ git push --force origin features/

現在のブランチを最新マスタでリベースする

$ git fep
$ git co features/add-circle-ci-#18
$ git rebase origin/master

rebase直前に戻る場合

$ git reset --hard ORIG_HEAD

cherry-pick

調査中

その他

オプション

commit

  • a:git statusの追跡されてるコマンドを一括コミット。addを短縮できる

log

  • p:ログの詳細

diff

HEAD:通常ワーキングツリーとインデックスの差分を出すdiffだが、これは、最新のコミットとツリーとの差分をだす

.gitignore

*~
*.swp

などんp記述も可能

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away