- 投稿日:2019-11-01T18:07:45+09:00
gitのコマンドメモ
gitをローカルで使う場合、よく使うコマンドについてのメモ。
push,pullなどのリモートリポジトリとの連携は後日書こうと思います。
gitのインストールは完了している想定です。※筆者はgitにあまり慣れていないため、誤った認識、記載があるかもしれません。ご注意ください。
1.リポジトリ作成
作業ディレクトリ下に移動して
git initを実行。
これでgitリポジトリが作られる。ls -aで確認してやると、.gitができている。$ git init$ ls -a . .. .git2.ディレクトリ更新
適当な新しいファイル
a.txtを作成してみた後にgit statusで状態を確認してみる。
現在のリポジトリでは追跡できていないファイルが表示される。$ git status On branch master Initial commit Untracked files: (use "git add <file>..." to include in what will be committed) a.txt nothing added to commit but untracked files present (use "git add" to track)
git addで、更新情報を保存してやる。--allオプションは、変更されたファイル一式が更新される。$ git add --all3.コミット
リポジトリにコミット。
-m以下はメッセージ。$ git commit -m "first commit" [master (root-commit) d80db16] first commit 1 file changed, 1 insertion(+) create mode 100644 a.txtgit statusで作業ディレクトリの更新を確認して、nothing to commitになっていれば、無事完了
$ git status On branch master nothing to commit, working directory clean4.ブランチの作成
各自開発をしていく時には、masterからブランチを切ってやり、作業完了後にmasterに統合してやる。
今はブランチがmasterのみなので、作業用のブランチを作成してやる。$ git branch mywork$ git branch * master mywork新しいブランチmyworkへ移動して、切り替わっていることを確認。
$ git checkout mywork Switched to branch 'mywork'$ git branch master * myworkもう一度新しいファイル
b.txtを作って、コミットしてやる。$ git add --all$ git commit -m "b.txtを追加" [mywork 0f05c45] b.txtを追加 1 file changed, 1 insertion(+) create mode 100644 b.txtmyworkブランチでのgitのログを見てみると、2回コミットした履歴が確認できる。
$ git log -p commit 0f05c45536fc6120da0a2c6c05d5e5e17946e817 Author: user Date: Fri Nov 1 06:39:51 2019 +0000 b.txtを追加 diff --git a/a.txt b/b.txt new file mode 100644 index 0000000..3e75765 --- /dev/null +++ b/b.txt @@ -0,0 +1 @@ +bbbbb commit d80db16e3263fc9b22978bafdfe790425ef17306 Author: user Date: Fri Nov 1 06:34:58 2019 +0000 first commit diff --git a/a.txt b/a.txt new file mode 100644 index 0000000..2d832d9 --- /dev/null +++ b/a.txt @@ -0,0 +1 @@ +aaaaa5ブランチのマージ
git mergeで、さっき新しく更新したmyworkをmasterに統合する。$ git merge mywork Updating d80db16..0f05c45 Fast-forward b.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 b.txt6.過去の状態でブランチを作成する
今のディレクトリ内では
a.txt,b.txtの2ファイルが存在する。$ ls -a . .. .git a.txt b.txt
a.txtを作る前のfirst commitのタイミングに戻って作業したい時は、
git logで記載されているcommit以降のidを入力してgit checkout -bを行うと、過去の状態でのブランチを作成することができる。$ git checkout mywork Switched to branch 'mywork'$ git log commit 0f05c45536fc6120da0a2c6c05d5e5e17946e817 Author: user Date: Fri Nov 1 06:39:51 2019 +0000 b.txtを追加 commit d80db16e3263fc9b22978bafdfe790425ef17306 Author: user Date: Fri Nov 1 06:34:58 2019 +0000 first commit$ git checkout -b mywork_first d80db16e3263fc9b22978bafdfe790425ef17306 Switched to a new branch 'mywork_first'新しいブランチができていて、
git logもfirst commit時に戻っている。
ディレクトリ内もb.txtができる前の状態に戻った。$ git branch master mywork * mywork_first$ git log commit d80db16e3263fc9b22978bafdfe790425ef17306 Author: user Date: Fri Nov 1 06:34:58 2019 +0000 first commit$ ls -a . .. .git a.txt
- 投稿日:2019-11-01T18:03:17+09:00
GitHubへのpushまでの流れ
githubへpushを勉強したのでアウトプットします。前提
開発環境 AWScloud9
やること
- githubにアカウント登録(飛ばす)
- リモートリポジトリを作成(ここも飛ばす)
- ssh公開鍵を登録
- pushしたいディレクトリをgit管理下に置く
- pushするディレクトリをcommitする
- リモートリポジトリの登録
- githubへpushする
ssh公開鍵の登録
githubに登録する用の秘密鍵/公開鍵のペアを作成する。
$ cd~/.ssh $ ssh-keygen #色々と入力が求められるが空欄でEnterでも可能$ cat ~/.ssh/id_rsa.pub作成した公開鍵の内容を表示し、コピペしてgithubに登録。
pushしたいディレクトリをgit管理下に置く
githubにpushしたいディレクトリに移動して下のコマンドを実行するとディレクトリをgit管理下に置くことができる。
$git init
pushするディレクトリをcommitする
#このコマンドで対象をステージングエリアへ(git addの後に続く「.(ピリオド)」は、今のディレクトリ配下全てのファイルという意味) $git add . #このコマンドでローカルリポジトリへコミットする。 -mの後はコミットメッセージ $git commit -m "コミットメッセージ"
リモートリポジトリを登録する
#以下のコードでリモートリポジトリを登録する $git remote add origin git@github.com:アカウント名/リポジトリ名.git※間違ったリモートリポジトリを登録してしまった場合
#以下のコマンドで変更可能 $git remote set-url <リポジトリの名前> <新しいリポジトリのURL> #以下のコマンドでリモートリポジトリのURLを確認できる $ git remote -v
githubにpushする
#以下のコマンドでpushできる $git push -u origin master
- 投稿日:2019-11-01T18:03:05+09:00
git command
●gitをダウンロードした後に、下記設定をする
git config --global user.name [username]
git config --global user.email [mailaddress]ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
●ローカルリポジトリには三つのエリアがある
・ワークツリー
↓add
・ステージ
↓commit
・ローカルリポジトリ
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
●ローカルリポジトリの新規作成
cd [path]
git init●リモートリポジトリからローカルに落とす
例えば
git clone "https://github.com/atom/atom"
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
●ステージに追加する(=次回のコミット対象に追加する)
git add [file name]
git add [directory name]全てのファイル変更をステージする
git add .ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
コミットする
git commit
・オプション
[-m]editorを立ち上げず、直接メッセージ付きで変更する
[-v]変更箇所を表示させるコメント追記のルール
一行目:変更箇所
三行目:変更の目的ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
●git status
・ワークツリーからステージ間の変更(ファイル新規、変更、削除)を表示させる
・ステージからローカルリポジトリ間の変更を表示させる
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
●git diff(git addとgit commitする前にやる)
・git addする前の変更差分(ファイル変更、削除)(ワークツリーとステージの間)
git diff
git diff [ファイル名]
※新規のファイルは比較対象外・git addした後の変更差分(ステージとローカルリポジトリの間)
git diff --staged
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
リポジトリにコミットした履歴を表示させる
●git log・オプション
[--oneline] 一行だけを表示させる
[-n 3] 最新の3世代を表示させる
[-p] 変更詳細を表示させる
[ファイル名] 指定のファイルだけを表示させるーーーーーーーーーーーーーーーーーーーーーーーーーーーー
●管理したくないファイルをgitから除外する
.gitignore というファイルで管理する(直接ファイル名を指定)
windowsでは「.gitignore」を作れないので、「.gitignore.」を作る
※コミットするまで除外できるーーーーーーーーーーーーーーーーーーーーーーーーーーーー
●git rm
コミットしたファイルを管理から外す
・ファイルも一緒に削除する
git rm [file name]
git rm -r [directory name]
・ファイルを残し、管理だけを外すとき
git rm --cached [file name]
あと、.gitignoreに追加する必要があるーーーーーーーーーーーーーーーーーーーーーーーーーーーー
●git mv
・改名
git mv [旧ファイル名] [新ファイル名]・移動
git mv [ファイル名] [パス]
相対パスも絶対パスもOKーーーーーーーーーーーーーーーーーーーーーーーーーーーー
●コマンドに別名をつける
git config --global alias.[別名] [コマンド名]
例えば:
git config --global alias.ci commitーーーーーーーーーーーーーーーーーーーーーーーーーーーー
●ワークツリーの変更を取り消し
git checkout [--file name] ステージの状態に戻す●ステージした変更を取り消す
git reset HEAD [--file name] コミットしたブランチの状態に戻す●直前のコミットをやり直す(ローカルリポジトリ限定)
ファイル変更、ステージした後に、下記コマンドを実行
git commit --amendーーーーーーーーーーーーーーーーーーーーーーーーーーーー
●プッシュ
まず、リモートリポジトリ新規作成
git remote add origin https://github.com/xiewenna123/intro_repo.git
※origin:リモートリポジトリ名、自分で定義する
https://github.com/xiewenna123/intro_repo.git リポジトリあと、リモートリポジトリのマスタにプッシュ
git push origin master
もし、branch_aにプッシュする場合:
git push origin branch_a
git push [リポジトリ名][ブランチ名]●git remote
リモート名一覧を表示する
●git remote -v
リモートリポジトリも表示したい時●git remote show [リポジトリ名]
より詳細のリポジトリ情報を取得できる●git remote rename [旧リポジトリ名] [新リポジトリ名]
●git remote rm [リポジトリ名]
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
リモートリポジトリからローカルに情報を反映させたい方法二つある
●フェッチする
①git fetch [リポジトリ名] リモートリポジトリの情報をダウンロードする
②git branch -a ブランチ名リストを表示
③git checkout [branch name] ブランチを切り替える(このステップはやらなくてもいい)
④git merge [リポジトリ名]/[ブランチ名] 指定したブランチと現在にいるブランチと統合させる●プルする(上記の①+④と同じ意味)
git pull [リポジトリ名][ブランチ名]ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
●github workflow
①ローカルリポジトリに新しいブランチを作成し、チェックアウトする。
git checkout -b new_branch
②資源を変更し、コミットする
git add [file_name]
git commit -v
③変更をプッシュする
git push [ローカルリポジトリ名] new_branch
④github画面でpull requestを新規し、レビューしてもらう
⑤github画面で「merge pull request」ボタンを押し、新ブランチを削除する
⑥ローカルの跡片付け処理をする
git checkout master
git pull origin master
git branch -d new_branchーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
●git tag
すぐ切り戻しできるようにに、重要なコミットの後に付く(よくリリース時に使う)
git tag -a "tag name" -m "comment message"タグ一覧を表示させる:
git tagタグの詳細を表示させる
git show [tag_name]
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
●stash(一時退避する)
・作成(現在ワークツリーとステージにある変更ファイルを一時避難する、つまり、変更を隠すこと)
git stash・一覧
git stash list・復元
git stash applyステージの内容も復元する
git stash apply --index特定のstashを復元する
git stash apply [stash name]・削除
git stash drop特定のstashを削除する
git stash delete [stash name]全部削除
git stash clear
- 投稿日:2019-11-01T17:13:38+09:00
初めてのGit
今年(2019年)の4月に中途入社した、ペーペー社員です。
初めてちゃんとした?プロジェクトに入り、Gitを触る機会が増えた為、アプトプット。
中途とはいえ、業界未経験の私には、Gitがなんなのかさっぱり・・・
今回は初投稿という事で、Markdown記法の勉強も兼ねて、Gitの基本的用語から。
※SourceTree(Version:3.1.1)を使用ローカルリポジトリ
自分のマシン上にあるリポジトリ
リモートリポジトリ
ネットワーク上にあるリポジトリ
Commit(コミット)
ファイルやデュレクトリの変更をローカルリポジトリ内で変更を行う事
Push(プッシュ)
ローカルリポジトリの修正内容をリモートリポジトリに反映させる事
Pull(プル)
Fetch(フェッチ)
リモートリポジトリの最新データを取得する事
※Pullと違ってローカルリポジトリに取り込んだりしない
Stash(スタッシュ)
作業中の変更を一時退避させる事
※差し込み作業が入った時に、現時点ではCommitをしたくない時に使用
Cherry-pick(チェリーピック)
特定のCommitした内容だけをピックアップして取り込む事(複数OK)
Conflict(コンフリクト)
同じファイルに同じ箇所の変更が同時に起こる事
// コンフリクトの見方 <<<<<< HEAD 自分の変更内容 ===== コンフリクトが起きているブランチ master >>>>>>↓
<<<<<< HEAD private func hogeMethod() { print("hoge") } ===== private func fugaMethod() { print("fuga") } master >>>>>>どちらが正しいのか修正する必要がある
基本的な用語と意味を理解しておくと、操作しやすくなります。
学んだ事や理解したことがどんどん蓄積されていくので、おいおい投稿していこうと思います!
では、また!
- 投稿日:2019-11-01T16:59:39+09:00
Githubにpushしたときmasterがなかった話
概要
git initするときに気をつけないと、Githubにpushした際おかしなことになるよ、というお話。
詳細
sam init するときの通常手順
$ mkdir sam_sample && cd sam_sample $ sam init --runtime ruby2.5
この1行目のコマンドで一つ目のディレクトリを作り、2行目のコマンドでsam-appのディレクトリを作ります。
ここで、
git initするときに気をつけたいのが、sam-appディレクトリ内でgit initすること!
sam-appのなかでしないと、Githubにプッシュしたときにmasterが表示されないというおかしなことになります。。。
誰も同じことはしないと思いますが、備忘録として!
それでもやっちまったよ!っていう方はこちら↓
① まずはリポジトリの中身を消去します。
② 先ほどgit initしたディレクトリ内で、このコマンドを打ちましょう$ rm -rf .git③
sam-app(または名前を変更していればそのディレクトリ内)に入り、再度git init!
これで、再度Githubにpushしましょう!
今度はうまくいくはずです!
- 投稿日:2019-11-01T13:19:32+09:00
Gitでよく使うコマンド個人的まとめ
個人的にGitで割と使うコマンドをまとめました.
Gitにあげるときに最初にやること
Gitにpushしたいファイルをおいているディレクトリに移動し,以下のコマンドを順に実行
git remote add origin (リポジトリのURL) git push --set-upstream origin master<補足>
push:ローカルで行なった変更を、リモートに送り込む
originはURLの短縮名で、慣習的に"origin"が使われることが多い
新規ブランチ作成の儀Git初心者の頃(今もですが…笑)はよくこんな感じになりました…
エラーなしで通ったのは結局上にまとめている2行だけなのが分かると思います.
(一部個人情報の関係で塗りつぶしていて見にくいですが)リモートでの変更をローカルで受け取る場合
以下のコマンドを順に実行
$ git fetch $ git pull注)fetchとpullの違い
fetch -> すべての変更の取得:○、 カレントブランチの変更の取得: ○、 マージ: ×
pull -> すべての変更の取得:×、 変更の取得: ○、 マージ: ○ローカルでの変更をリモートに送る場合
以下のコマンドを順に実行
$ git add . $ git commit -m "ここに変更点などを書く" $ git push注) "."オプションは,対象がすべてのファイルだという意味
一度pushしたあとにGitHubのリポジトリ名の変更またはローカルのファイルの場所や名前を変更する
GitHubのリポジトリ名を変更した場合
GitHub上で名前変更後,コマンドプロンプトを起動,Gitにpushしたファイルをおいているディレクトリに移動して次のコマンドを実行
$ git remote set-url origin (新しいリポジトリのURL)ローカルのファイルの場所や名前を変更した場合
Gitにpushしたファイルをおいているディレクトリ(変更後の場所)に移動して次のコマンドを実行
$ git remote set-url origin (リポジトリのURL)Gitのローカルでの変更を破棄する場合
以下のコマンドを順に実行
$ git reset HEAD $ git checkout . $ git clean -fd参考サイト
【Git】リポジトリ内の不要なファイルを削除して元の状態に戻す方法(git clean) - メモ魔のめもまみれBlog(閲覧日:2019年11月1日)
http://memomamire.hatenablog.com/entry/2016/01/27/210607
- 投稿日:2019-11-01T12:41:02+09:00
git checkout/switch しようとして、error: cannot stat 'xx/yy/zz': Permission denied エラーが出た時の対処法
ある日…
Gitを使ってブランチAで開発をしていて、他の人が作業しているブランチBに移動し、確認だけして自分のブランチAに戻ろうとしました。
ブランチBでの確認作業を終え、
git switch ブランチAとした私は
error: cannot stat 'xx/yy/zz': Permission deniedというエラーが出てきてブランチAに戻れなくなってしまいました!
ブランチの移動に伴う、ファイルの変更・削除ができないときにこのエラーが出るようです。
解決方法
'xx/yy/zz'のディレクトリ階層のファイルをテキストエディタなどで開いていれば、それを全て閉じましょう。
再度 checkout / switch でブランチ移動できるはずです。私は体験していませんが、
error: cannot stat 'xx/yy/zz': Protocol errorの場合でも、同様の対処方法で解決できそうです。
参考にしたサイト
https://codeday.me/jp/qa/20190713/1250687.html
https://teratail.com/questions/60939
https://codeday.me/jp/qa/20190429/732351.html
- 投稿日:2019-11-01T00:15:36+09:00
mac Github .DS_Storeを登録しないようにする
目的
- macで自動生成されるファイル.DS_Storeをgithubのリポジトリの管理から外す方法を記載する。
- 一回の設定で全てのリポジトリで.DS_Storeを管理から外す。
実施詳細
下記コマンドを実行してHomeディレクトリに移動する。
$ cd下記コマンドを実行して.gitignore_globalファイルを作成する。
$ vi touch ~/.gitignore_global開いたtouch ~/.gitignore_globalファイルに下記の内容を記載して保存する。
.DS_Store下記コマンドを実行して設定を反映させる
$ git config --global core.excludesfile ~/.gitignore_global






