- 投稿日:2020-07-20T21:22:10+09:00
Git の基本コマンドまとめ
初期設定
インストールされた Git の確認
git versionユーザ名の設定 (Github で登録したユーザ名)
git config --global user.name "hogehoge"メールアドレスの設定 (Github で登録したメールアドレス)
git config --global user.email test@example.comGit でコミットやタグのメッセージを編集するときにデフォルトで使用されるエディタを設定
Atomを使う場合git config --global core.editor "atom --wait"VisualStudioCodeを使う場合git config --global core.editor "code --wait"設定内容の確認
git config --listローカルリポジトリに反映させるまで
まずは Git で管理していきたいディレクトリに移動します。
その後、そのディレクトリを丸ごとローカルリポジトリに追加するために git init と打ちます。git initこれで最初の準備の一つであるローカルリポジトリが作成できました。
さて、このあとは書いたコード等のファイルをローカルリポジトリに追加していきます。
普段、コードを書いたりファイルを作成する場所のことをGitではワークツリーといいます。
このワークツリーの状況をローカルリポジトリに反映させる前に、
一度「このファイルは反映させる準備OK」と明らかにするためステージにファイルを追加していきます。このときのコマンドが git add です。
git add ファイル名作業中のフォルダ内のファイルをすべて追加したければ git add . と打ちます。
git add .これでローカルリポジトリに反映させる準備が整いました。
その他に反映させたいファイルが出来上がったら、追加で更にファイルを git add でステージに追加します。
そしていよいよ準備が整ったら、git commit でローカルリポジトリに反映させることになります。
さらにオプションで -m "こめんと" という形でコメント付きのコミットを実行できます。
変更内容が自分からみても、他の人から見ても分かるようになるので必ずつけるようにしましょう。git commit -m "コメントを入力"これでローカルリポジトリへ変更を反映できました。
ちなみにワークツリー内の変更を一旦、コミット前に確認することもできます。
git status変更差分をみたいとき
git diff コマンドを使います。
ワークツリーとステージの差分を確認git diff or git diff ファイル名ステージとリポジトリの差分を確認git diff --stagedこれまでの変更履歴をみたいとき
git log一行ずつ要約して履歴を表示git log --oneline特定ファイルにおける変更差分を表示git log -p test.txtファイルの削除を記録
ファイルごと削除git rm test.txtディレクトリごと削除git rm -r testdirファイルは残すがリポジトリから削除git rm --chached test.txtちなみにこのとき削除したファイルを add はできないので、既にステージングが完了している状態になっています。
ファイルの移動を記録
git mv testOld.txt testNew.txtGithub 内の既存プロジェクトを作業するとき
あなたが開発チームに参入したときなど、既にGithubに上がっているコードから作業をする時があるかもしれません。
そんなときは、まずはリモートリポジトリ(今回はGithub上)にあるファイル達を一度ローカルリポジトリとワークツリーにコピーしてきてあげます。git clone リポジトリ名リポジトリ名は、Githubでコピーしたいリポジトリを開いたらClone用のURLをコピーできる場所から入手します。
上記は私のGithub内に作ったテスト用のリモートリポジトリですが、これをローカルリポジトリおよびワークツリーにコピーするときはこんな感じです。
git clone https://github.com/tmasuyama1114/testgit.gitリモートリポジトリ(Github)でコードを管理
リモートリポジトリ(Github)を新規追加
git remote add origin リポジトリURL で追加できます
git remote add origin https://github.com/tmasuyama1114/testgit.gitなお、cloneしたリポジトリで作業しているときは既にorigin(ショートカット)が存在してしまっているので以下のコマンドで一度削除してあげます。
git remote rm originここでいうoriginは、登録するリモートリポジトリURLの短縮名というイメージです。
リモート
git push リモート名 ブランチ名 でプッシュします
git push origin masterちなみに最初に以下のようにオプションをつけておくと、次回以降pushするときに「origin master」とつけなくて済みます。
git push -u origin masterGitで管理させないファイルを登録
パスワードが書いてあるファイルだったり、ただのキャッシュファイルだったりするようなものはGitでバージョン管理する必要がありませんね。
そういったファイルは .gitignore に書きます。以下は、ignoreFile.txt というファイルをバージョン管理したくないときの .gitignore ファイルです。
.gitignore# 以下のファイルはGit管理対象外 ignoreFile.txt変更を戻す時
ファイルへの変更を取り消す
git checkout --test.txtディレクトリ全体の変更を取り消す
git checkout --testdir全変更を取り消す
git checkout --ステージした変更を取り消す (git add したものを取り下げる)
ステージしたファイルを取り消す
git reset HEAD test.txtステージしたディレクトリを取り消す
git reset HEAD testdirステージした全変更を取り消す
git reset HEADコミットのやり直し
pushする前ならばコミットをやり直せる(修正できる)
直前のコミットのやり直し(今のステージの内容で)
git commit --amendリモートリポジトリとのやり取り
リモートリポジトリの設定
リモートを表示
git remote詳細情報git remote -vリモートリポジトリを複数登録
git remote add リモート名 リモートURL例えば origin の他に other というリモートリポジトリを登録した場合は
以下のようなコマンドでpushなどの操作を行うことになります。git push other https://xxxxxxxxxxリモートから取得(フェッチ)
フェッチはリモートから情報をコピーした後、すぐにマージしない時に使うコマンドです。
git fetch origin(リモート名)フェッチの場合、ワークツリー(master)には保存されずブランチとして保存されるので
内容を表示したいときは git branch -a でフェッチしたものを確認し、
git checkout remotes/origin/master でブランチを切り替えます。フェッチした内容を origin/master ブランチに merge したいときは
先に git checkout master でmasterブランチに戻り、以下のコマンドを入力します。git merge origin/masterリモートから取得(プル)
プルはリモートから情報をコピーした後、すぐにマージする時に使います。
git pull origin masterそのため、上記のコマンドと下記のコマンドは同じ意味を持ちます。
git fetch origin master git merge origin/masterリモートの詳細情報を表示
git remote show originリモートを変更する(リネーム)
git remote rename 古いリモート名 新リモート名リモートを削除する
git remote rm リモート名ブランチの操作
ブランチを追加
git branch ブランチ名ブランチの一覧を表示
git branchすべてのブランチを表示
git branch -a既存のブランチを切り替える
git checkout 既存ブランチ名ブランチを新規作成して切り替える
git checkout -b 新ブランチ名変更をマージ
git merge ブランチ名ブランチ名の変更(作業中のブランチで入力)
作業中のブランチで以下を実行します。
git branch -m 新しいブランチ名ブランチの削除
git branch -d ブランチ名上記を実行したとき、対象のブランチがもし master にマージされていないブランチである場合には削除できません。
それでも強制的にブランチを削除したいときは、git branch -D ブランチ名コンフリクトの扱い
同じファイルで、同じ行に対して異なる変更を行うとコンフリクトが発生します。
その際にはコンフリクトを解消してあげる必要があります。解消方法
コンフリクトしたファイルには、コンフリクトが発生した箇所がわかるようになっているので
最終的な(正しい)形にファイルを修正してあげればOKです。コンフリクトが起きているファイルの確認方法
git statusで確認すると、該当のファイルが表示されます。
そしてワークツリー内のファイルを確認するとコンフリクトについての記載があるので、あるべき姿になるように修正の上
git add と git commit をしてあげればコンフリクトを解消できます。コンフリクトの防止するための注意点
- 複数人でファイルを同時に編集しないこと
- pull を行う際は、pull をしようとしているブランチに checkout してから pull を行うこと
- pull・merge をする前に commit or stash を行い、編集中のファイルを無くす
- 投稿日:2020-07-20T14:52:03+09:00
独自ルール:多人数開発のためのグループプロジェクトについて
【自分とこの環境下におけるGit & GitLabレクチャー】
グループプロジェクトに関わる人達に向けて.大きく分けると以下の利用が考えられる.
- プロジェクト立ち上げ側
- プロジェクト利用側
- 単に使いたい
- 自分のプロジェクトの一部として使いたい
- 使いながら追加・修正し,もとのプロジェクトに貢献もしたい
- プロジェクト開発にも関わる
プロジェクトの立ち上げ側
流れとしては以下のようになる.
- 個人プロジェクトとして作成.
- 共有したいプロジェクトが出てきたらグループプロジェクトに変更
後輩などに自分のプロジェクトを使用してもらいたくなった場合,個人プロジェクトからcloneすると面倒になる.
そのような要求が出始めたらグループプロジェクトにしましょう,という話である.グループプロジェクトへの変更方法
フォークを使用する.
GitLabでの作業
- GitLabにログイン,グループプロジェクトに変更したいプロジェクトに移動.
- 左ペインの「プロジェクトの概要」から「詳細」を選択.
- メイン表示部分のフォーク(もしかしたらFork)を選択.
- フォーク先の候補が出るので選択.
以上の作業によって個人プロジェクトがなくなることはない.
ただし,グループプロジェクトと同期しているつもりが個人プロジェクトと同期してしまっていたりすることがあるので注意すること.立ち上げ者のローカルでの作業
git pushやpullのアドレスが合わるのでURLを更新する.
やり方としては
- git cloneをし直す
- git remote renameとaddでoriginのアドレスを更新する
のどちらか.renameとaddを使用する場合は以下の通り.
$ git remote rename origin personal $ git remote add origin [グループプロジェクトのURL]ここでグループプロジェクトのURLはGitLabの『クローンする』で出てくるgit@から始まるもの.
プロジェクト利用側
以下の例のもとに説明する.
- ワークスペースやプロジェクトを置きたいディレクトリ
- 名前を[ws]
- プロジェクト
- 名前を[proj]や[my_proj]
- プロジェクト内部の一部のディレクトリ・ファイルなど
- 名前を[dirfile]など
- プロジェクトのURL
- 名前を[group_url]
単に使いたい
とりあえず難しく考えずに使いたかったり,プロジェクト自体が完結しているのでそのまま使える場合を想定する.
手順
$ cd [ws] $ git clone [group_url]手順:ちょっと凝った手順
clone時に全部DLするのではなく,必要なもののみをDLする方法.
参考:Gitの一部のディレクトリだけ取得する方法$ cd [ws] $ git init $ git config core.sparsecheckout true $ echo [dirfile] >> .git/info/sparse-checkout # sparse-checkoutの中に記述されてるもののみをDL.複数の場合は複数行記述. $ git remote add origin [group_url] $ git pull origin master自分のプロジェクトの一部として使いたい
外部のプロジェクトを自分のプロジェクトの一部として使いたい.そのプロジェクトの管理は外部に任せて,自分ではいじらない.
git cloneで持ってきちゃうとオリジナルと持ってきたもので2重になり管理が大変.そんなことはしたくない場合に使用.
基本的にROS2システムの場合,様々なパッケージ(プロジェクト)を寄せ集めて一つのやりたいこと(ワークスペース)をしているので,この使い方になりそう.
参考:手順
基本的に自分のプロジェクト[my_proj]があり,その中に外部のプロジェクトgroup_urlを取り込む.
前提として自分のプロジェクトが既に存在し設定していること.設定
設定しただけでは外部のプロジェクトの中身は空っぽです.
$ cd [my_proj] $ git submodule add [group_url]使用
外部プロジェクトのDL.
$ git submodule init
外部プロジェクトのアップデート.
$ git submodule update
使いながら追加・修正し,もとのプロジェクトに貢献もしたい
外部のプロジェクトを使いながら,中身を追加・修正しもとのプロジェクトに貢献したい偉い人用.
基本的にROS2システムの場合,様々なパッケージ(プロジェクト)を寄せ集めて一つのやりたいこと(ワークスペース)をしているので,この使い方になりそう.手順:自分の好みのままにいじってみたい場合
GitLab上にて,グループプロジェクトを自分の個人プロジェクトとしてForkしていじる.
その中で他人にも使えそうなものは,グループプロジェクトにマージリクエストして還元する.手順:自分のプロジェクトの一部として使用していく場合
基本的に自分のプロジェクト[my_proj]があり,その中に外部のプロジェクトgroup_urlを取り込む.
前提として自分のプロジェクトが既に存在し設定していること.
またremote addでつける名前はなんでもいいが,ここでは[out_name]とし,取り込むディレクトリを[out_dir]で説明.
参考:設定
$ cd [my_proj] $ git remote add [out_name] [group_url] $ git subtree add --prefix [out_dir] [out_name] master --squash更新
$ git pull -s subtree --squash [out_name] masterその他:他の人のプロジェクトを見るためには
グループプロジェクトを選択した状態で左ペインにある「メンバー」をクリックすると参加しているメンバー一覧を見ることができる.そこからメンバーをクリックすると各メンバーのページに飛び,そのメンバーが持っているプロジェクトを見ることができる.
なお,universal_toolsのグループプロジェクトには全員を登録している(つもり)なので,他のプロジェクトに参加している人にアクセスしたい場合はこちらのグループプロジェクトを参照のこと.
- 投稿日:2020-07-20T00:12:11+09:00
Gitの解説動画一覧
概要
gitについて勉強しています.Youtubeにある動画の感想を残しておきます.
動画一覧
gitの目的や考え方など、現役エンジニアが解説
最初にみるのに良いかも
【Git入門】サルでも分かるGit入門の前に!Git使い方高速入門編【入門は5分で十分だと思います】
聞いていてイラつく人もいるかもしれないが,テンポ良く説明してくれてわかりやすい(悔しいかな).
【CC道場 #175】サルでもわかるGitスクール by Adobe x Nulab Creative Cloud -アドビ公式-
今後みたい動画.VScodeと取り合わせて説明してるっぽい.なんか馴染みやすい.