- 投稿日:2020-01-25T23:08:45+09:00
Gitコマンド(ブランチの作成)
はじめに
先日「基本のGitコマンド」にて簡単なGitコマンドについてまとめました。
今回はローカル環境でのブランチの作成についてまとめたいと思います。ブランチとは
ブランチとは、変更などの履歴の流れを分岐して記録していくものです。
分岐したブランチは他のブランチの影響を受けないため、同じリポジトリ中で複数の変更を同時に進めていくことができます。
この図でいくとbranchAとbranchBは並行した作業でそれぞれが独立した関係性になっています。
またbranchA1はbranchAから派生したbranchになっています。ブランチの作成時に必要なコマンド
//どのブランチいるかの確認 $ git branch//新規ローカルブランチを作る $ git branch (作成するブランチ名) //リモートのあるブランチを元に新規ローカルブランチを作る $ git branch (新しいブランチ名) (元にするブランチ名) //新規ローカルブランチを作りそのブランチに移動する $ git checkout -b (作成するブランチ名) //リモートのあるブランチを元に新規ローカルブランチを作りそのブランチに移動する $ git checkout -b (新しいブランチ名) (元にするブランチ名)//作業ブランチの親ブランチ(派生元)の確認 $ git show-branch | grep '*' | grep -v "$(git rev-parse --abbrev-ref HEAD)" | head -1 | awk -F'[]~^[]' '{print $2}'//作業ブランチの変更 $ git checkout (移動したい先のブランチ名)//強制的にマスターブランチに移動する $ git checkout -f masterさいごに
gitコマンド結構多いなと思いましたが覚えて使いこなすと意外と便利なので慣れるまで試すのがいいとおもいます。
【参考】
ブランチとは|サルでもわかるGit入門【プロジェクト管理ツールBacklog】
Gitで今のブランチの派生元ブランチを特定する - Qiita
- 投稿日:2020-01-25T22:29:12+09:00
チーム開発の時にpushできなくったお話
事件発生
あ、コンフリ起きてる、よしなおそう!
よし治った!
git push origin CurrentBuranch
いざ!実行!
あれ?
なんかcommitログがありませんだって⁉︎なんぞ?
私コンフリを直してpushしたいだけですけど?とりあえず自分が何をやっていたかを確認
何が起こったかわからなかったのでとりあえず自分が今までどこで何をしていたかを確認することにしました。(※これ以降の話を聞くと気づく人速攻で気付きます。こいつはバカだ!ということに…誰がバカじゃい!)
なんか聞こえたけど進めていきましょう。
私が行ったことは......
1. ファイルをpushする
2. なぜかpullrequestを見に行った
3. コンフリクトに気づく
4. どこがコンフリしてるかweb上で確認した
5. web上で直した
6. shellに戻る
7. pushする
8. gitさん『お前さんのcommitLogないで〜』
9. 私『は?』
ってことがあったような気がする(ありました!)
もう気づく人は気づきましたよね!
そうです!私はいつもならエディタ上でコンフリを治すのにこの日はなぜかwebのgithub上でコンフリを直したんです。そしてそこでなぜかshellに戻りいつものようにpushしたんです。そりゃgitさんが怒るわな!何が起こっていたのか
web上のgithubでコンフリを直したことでmyPCのローカルブランチの外で直したことになります。つまりGitHubの更新履歴がローカルに取り込めていないという状況が出来上がっているんです。
これにより自分がいくらpushしてもそんなものはないと怒られるんです。いや〜アホですね!
まぁ何はともあれ原因さえわかってしまえばこっちのもんだ!どう直したか
結論から言います!!
GitHubから自分おブランチの変更点を持って来ればいいのです。
つまり
git pull origin CurrentBuranch
このコマンド打ち込んで差分をひっぱてきました。
以上!
終わり!
ちゃんと解説しますね
先ほども述べたように自分のパソコンの中ではweb上での更新点がないことになっています。これではいつまで経ってもpushはできません。何せPC内ではcommitしてないことになっているのですから。そこでGitHubと自分のPCのbranchの状態を同じにすることが必要になります。よって上のコマンドを打つことでGitHubのCurrentbranchの状態を自分のPCに持ってくるのです。GitHubが先行する状況が出来上がってるとは思いませんでしたね
- 投稿日:2020-01-25T19:14:03+09:00
GitHubに移したリポジトリの草が生えない時の対処法
はじめに
この記事で行なっている作業はコミット履歴を全て更新するため、自分しかコミットしていないリポジトリ向けです。
問題発生
BitBucketからGitHubへのリポジトリ移行作業を行なっていたところ、移したリポジトリのコミットがコントリビューションに反映されないという問題が起きました。
原因
せっかくリポジトリを移したなら草も生やしたいものです。
原因を調べてみると、昔のリポジトリにコミットした時のauthorと今のGitHubアカウントに設定しているauthorのメールアドレスが異なるため、コントリビューションに反映されないのだということが判明。解決方法
コミット内容に問題があると分かったため、修正します。
まず現在設定しているauthorの情報を見るためにローカルでgit config --list
を実行。gon@hon-no-MBP ~ % git config --list --global user.name=gon user.email=new-gon@example.co.jp core.excludesfile=/Users/gon/.gitignore_global difftool.sourcetree.cmd=opendiff "$LOCAL" "$REMOTE" difftool.sourcetree.path= mergetool.sourcetree.cmd=/Applications/SourceTree.app/Contents/Resources/opendiff-w.sh "$LOCAL" "$REMOTE" -ancestor "$BASE" -merge "$MERGED" mergetool.sourcetree.trustexitcode=trueuser.emailがGitHubに設定しているメールアドレスと同じなら大丈夫です。
次に問題のリポジトリをローカルにクローン。クローンしたリポジトリに移動し、
git filter-branch
コマンドを実行。authorとcommitterのメールアドレスと名前を現在使用しているものに変更しましょう。
git filter-branch
は一度に大量のコミットを書き換えられる便利なコマンドです。
詳しくはこちら。git filter-branch -f --env-filter "GIT_AUTHOR_NAME='gon'; GIT_AUTHOR_EMAIL='new-gon@example@example.co.jp'; GIT_COMMITTER_NAME='gon'; GIT_COMMITTER_EMAIL='a-new@example@example.co.jp' ;" HEADその後、もう一度
git log
でコミット履歴を確認すると、コミットのauthorのメールアドレスが先ほど設定したものに変わっています。最後にGitHubに
git force push
します。
git force push
は使いたくない場合は、GitHubに新しくリポジトリを作ってそちらにpushしてもいいかと思います。ここまで終えたら、コントリビューションを確認します。
無事草が生えていたら喜びましょう!
- 投稿日:2020-01-25T15:16:34+09:00
�【超初心者向け】GitHubってなんじゃい【Gitすら分からん】
※後半からはmac向け記事です
- Gitすら分からない(リポジトリ?クローン?何それおいしいの?)
- GitHubが分からない
- GitHubの操作が分からない
- とにかくやってみたいけど何からやればいいかすら分からん
そんな人たち向けの記事です。
本当に基本的な用語を確認したのち、一緒に手を動かしながらGitHubの基本操作をできるようにしましょう。そもそもGitってなんじゃい
Git = 分散型バージョン管理システム
ファイルを更新していく際、それらを編集前の状態に戻したい場合や、今まで作成したものを残しておきたい場合、最も手軽なのはファイルをいくつもコピーして残しておいて、更新するたびに新たなファイルに日付をつけて更新していくというのがあります。
これでは何がなんだか分からん!!
誰が更新したものなのか、いつ更新したものなのか、何が更新されたのか分からん!!
そもそもどれが最新のものかも分からん!!しかもうっかり共通フォルダで複数人が同時に作業した場合には、後から更新した人の上書き保存によって先に作業していた分が消えてしまうという悲劇も起こりかねません。
これらの問題を解決するものがGitです。
Gitを用いたバージョン管理
Gitでは、ファイルの状態を好きなときに更新履歴として保存しておくことができます。そのため、一度編集したファイルを過去の状態に戻したり、編集箇所の差分を表示したりすることができます。
また、古いファイルを元に編集したファイルで、他人の編集した最新ファイルを上書きしようとすると、サーバにアップロードした時に警告が出ます。そのため、知らず知らずのうちに他人の編集内容を上書きしてしまうといった失敗は起こりません。
チームで作業するならGitでコード管理しよう!
Gitの仕組み
どうやって履歴を管理するの?
リポジトリ
Gitにおいて、ファイルやディレクトリ(フォルダ)の状態を記録する場所をリポジトリといいます。
情報工学において、仕様・デザイン・ソースコード・テスト情報・インシデント情報など、システムの開発プロジェクトに関連するデータの一元的な貯蔵庫を意味する言葉です。まず、Gitのリポジトリは、リモートリポジトリとローカルリポジトリの2種類に分けられます。その二つから理解していきましょう。
ローカルリポジトリ
ユーザ一人ひとりが利用するために、自分の手元のマシン上に配置するリポジトリ
普段の作業はここ。手元でコード編集などを行います。
自分の手元にローカルリポジトリを作成する方法は二種類あり、一つ目は全く新しいリポジトリを作成する方法、二つ目はリモートリポジトリをコピーして作成する方法です。
具体的にはリモートリポジトリからCloneしてきたところに作られるClone毎のリポジトリとかなんとかあるのですが作成方法については後ほど。リモートリポジトリ
チームのみんなで共有するためのリポジトリ
ローカルリポジトリで作業した内容はリモートリポジトリにアップロードすることでチームのみんなに公開することができます。また逆にリモートリポジトリにおいてある他の人の作業内容を手元にダウンロードすることもできます。覚えておきたい言葉
Push(プッシュ) ローカルリポジトリからリモートリポジトリにデータをアップロードすること
Clone(クローン) リモートリポジトリの状態を丸ごとローカルリポジトリにコピーすること
Pull(プル) リモートリポジトリからローカルリポジトリを更新すること
Commit(コミット) ファイルやディレクトリの追加・変更を、リポジトリに記録する操作超簡単に言うとこんな感じです。
commit → ゲームのセーブ push → 現在のセーブデータをサーバに保存 Clone → セーブデータを保存してるサーバーの内容を丸々ローカルにコピー pull → Cloneしたデータを最新の状態に更新Gitは親切なので、いきなりセーブデータをアップロードして他の作業者とデータがかち合ったり、何が作業前との変更点なのか報告させたりするステップを用意させています。
またバグ修正など軽微な変更をする際には頻繁にコミットを行って、何かあったときにすぐに昔のデータをロードできるように細かくセーブしておくことも大切です。ゲームと一緒ですね。GitHubが分からない
GitHubとは
GitHubは、ソフトウェア開発のプラットフォームであり、ソースコードをホスティングする。コードのバージョン管理システムにはGitを使用する。(Wikipedia)
よく分かりませんね。
分からない時にはとりあえずやってみよう、ということで数ステップに分けて一緒に初めてのGitHubやっていきましょう。GitHubをweb上で触ってみよう
Gitはターミナル上で操作することも可能ですが、GitHubを使うとより直感的にGitを操作することができます。まずはここから慣れていきましょう。
Step0 アカウントを作る
これがなければ始まらない。とりあえずアカウントのない方は作ってきてください。
【2019年1月現在】GitHubアカウント作成方法Step1 リモートリポジトリを作る
GitHub上にリモートリポジトリを作成してみましょう。
左上のgithubの猫ちゃんマークをクリックするとリポジトリの新規作成ボタン(Newボタン)が現れるのでクリック
各項目を入力しCleate Repository
* Repository name 作成するリポジトリの名前。スペースがあっても大丈夫。
* Description 作成するリポジトリの説明
* Public/Private 作成するリポジトリを公開するか、非公開にするかを選択
* Initialize this repository with a README リポジトリーにアップするコードの説明書を作成するか。できるだけ作っておきましょう。作成するとDescriptionに書いた説明が自動的に反映されます。Step2 リモートリポジトリにファイルを追加してみよう
簡単な方法はCleate new fileから直接コードを書き込むか、Upload fileから手元にあるファイルをアップすること。まずは何か作ってみましょう。
今回は
test.txt
を作成しました。
作成したらコミットしてみましょう。
上の行は何をしたか(何も書かなければ適当に追加してくれます)
下の行は詳しい説明を書き加えられます。
記入できたらCommit directly to themaster
branch.を選択しCommit new fileをクリックこれで新しいファイルを追加できました。
Step3 変更を加えてみよう(Commit)
先ほど作成したファイルに少し手を加えてセーブ(コミット)してみましょう。
test.txtを選択し右にある鉛筆アイコンをクリックすると編集できます。
適当に編集したらCommit directly to themaster
branch.を選択しCommit new fileをクリック。
これでコミット完了です。
Step4 branchを使ってみよう
さっきは変更をそのまま適用しましたが、実際にチームでプロジェクトを進めていく場合にはいきなりオリジナルのコードに変更を適用するのはリスクがあります。そこでブランチ(branch)機能を使うことで一度本番のコードとは別に変更を加えて、後からチームのレビューを行ったのち本番のコードに変更を適用することができます。
もう一度鉛筆アイコンをから編集してみましょう。
編集が完了したら今度はこちらにチェックマークをつけてコミット。
こうすることでoozzZZZZ-patch-1
というブランチが生成され、本番のコードとは別に開発を進めることができるようになります。また、コミットするとこちらの画面に切り替わります。これはPull requestです。
ブランチで行った開発に不具合がなさそうならPull requestを作成することでプロジェクトのコード検証者にチェックしてもらう要望を送ることができます。今回はあなたが責任者なのでCreate pull request
をクリックし、遷移した画面でMarge pull request
をクリックしてください。Marge(マージ)することで、枝分かれ(ブランチ)した開発を本番のコードと統合することができます。ところで画面上のタブに
Insights
があるのでそこをクリック、そしてNetwork
をクリックしてみてください。
するとNetwork graphがみられると思います。枝分かれ(branch)した開発が本番のコード(master)に統合(Marge)されているのがわかると思います。
以上で簡単なGitHub上での開発の流れとGitの大まかな仕組みについてはわかったかと思います。
今度はGitHubのようなリモートリポジトリでの操作ではなく、あなたのPC上にローカルリポジトリを作成し、ローカルリポジトリでのClone、Pull、Commit、Pushを行っていきましょう。ターミナルからGitを操作してみよう(Mac)
これまで私たちはGitHubの画面を通じて直接リモートリポジトリにアクセスし、ファイルの変更や追加を行ってきました。
次のステップでは自分のマシンにローカルリポジトリを作成し、リモートリポジトリからファイルをダウンロードしたり、逆にアップロードする方法について学んでいきましょう。簡単のために、今回はあなたのマシンのデスクトップ上にテスト用のディレクトリを作成し、そこにリモートディレクトリの内容をクローン。そこでファイルの変更を行いコミットし、最後にリモートディレクトリにプッシュしてみましょう。
Step1 Cloneしてみよう
今回は先ほど作成したGitHub上のリモートリポジトリをあなたのマシンにCloneしてみましょう。
まずデスクトップにディレクトリを作成します。
ターミナルを開いてください。cd desktopを入力してください。
cd
はUNIXコマンドと言って、macやLinuxなどUNIX系のマシンを操作するためのコマンドです。
たくさんありますがよく使うところから慣れていきましょう。cd
はCurrent Directryで、ターミナルで触る場所に移動することができます。cd desktop
ならデスクトップに、cd documents
ならドキュメント(書類)に移動します。次はデスクトップに
test
という名前のフォルダを作り(make directrymkdir
)、そこに移動します(cd test)。mkdir test cd testあなたのPCのデスクトップ上にも
test
という名前のフォルダが生成されていますね。次はここにGitHubに作ったリモートリポジトリーをクローンしましょう。
まず
GitHubのページのここからURLをコピーしてきてください。
できたらターミナルにgit clone [URLをペースト]を入力してください。(もしGitHubからログインを求められた場合はアカウントとパスワードを入力してください)
するとデスクトップ上のtest
フォルダの中にリモートリポジトリ上のファイルがコピーされています。Step2 ファイルを開いてみよう
test
ディレクトリの中に生成されたMy-New-Repository
に入り、test.txt
を開いてみましょう。
txtファイルの中身を確認するコマンドはmore
です。cd My-New-Repository more test.txt先ほど作成したtxtフィイルの中身を閲覧できます。
もう一度Enterキーを押せばファイル閉じられます。Step3 pullを使ってみよう
もう一度GitHubに戻り今度はtest2.txtを作成してみてください。記述は何でもいいです。
作成できたら再びURLをコピーしターミナルでgit pull [URLをペースト]してみてください。するとあなたのデスクトップのディレクトリにもtest2.txtが追加されていると思います。
pull
を使うと更新することができます。Step4 ファイルを作成してみよう
次はマシンのローカルディレクトリからファイルを作成し、GitHubのリモートディレクトリに変更内容を反映させてみましょう。
ファイルを新規作成するUNIXコマンドは
touch ファイル名
ですので、touch test3.txtと入力することで新しいtxtファイル
test3.txt
が作成されました。確認してみてください。
ちなみに、現在のディレクトリのファイル一覧を表示するコマンドls
を入力すれば、ターミナルからも確認できます。ls ---------- README.md test.txt test2.txt test3.txtStep5 ローカルディレクトリに変更内容をコミットしよう
GitHubでも行ったように、ローカルディレクトリでも変更や追加、修正を行った場合には細かなセーブ(コミット)が必要です。コミットは
git commit -m "コメント"
で行えます。(コメントはちゃんと書こうね!!)git commit -m "test3,txtを 追加しました"ちなみにこれまでのコミット内容は
git log
コマンドでチェックできます。Step6 ローカルディレクトリでの変更内容をリモートディレクトリに反映させよう(Push)
まずは準備をします。Gitの変更を反映させるためにはまずindexにファイルを追加する必要があります。
git add .これで現在のディレクトリ(
My-New-Repository
)以下がindexに追加されます。これをリモートリポジトリに反映させます(Pushします)。
今回はブランチなどせずmasterの更新として反映させます。git push -u origin masterこれでPush完了です。GitHubに戻りページを更新してみると新たなファイルが追加されていることが確認できます。
Step7 新たなブランチとしてpushしてみよう
もちろんGitHubで行った時と同様、いきなりmasterに変更を加えるにはリスクがありますので、今回の変更をブランチとしてpushすることも可能です。
新しいブランチを作成するには次のコマンドを入力します
git checkout -b 作成するブランチ名
git checkout -b testbranch作成した
testbranch
にPushするにはgit push -u origin testbranchこれで完了です。GitHubから確認してみてください。
終わりに
以上でGitの簡単な使い方についてでした。
ここまで記載した一連の流れを踏めばある程度Gitの流れは確認できると思います。
あとはもう自分で好きなように今回作成したリポジトリを機能のテストなんかに使えばいいと思います。慣れてきたらこっちにもチャレンジ!!(Qiita記事)
git100本ノック
- 投稿日:2020-01-25T03:35:30+09:00
シチュエーションから引くGitコマンド
はじめに
最近プライベートリポジトリの作成が条件付きで無料になった(2019年1月7日記事)そうなので、一年遅れではございますがこれを期に勉強しようと思い立ちました。
ただ、Gitはできることが多い分、どういうときに、どのような順番で、どんなコマンドを実行すれば良いのか全体像がつかみにくいと思っています。(かくいう私はGitド初心者です・・・。)
自分の覚書として書いていますが、何か「ここ違うで~」ということがあればコメントでご教授いただければと思います。プロジェクトを立ち上げたい
mkdir DIRECTORY_NAME
でディレクトリを作成するcd DIRECTORY_NAME
で先ほど作成したディレクトリにカレントディレクトリを移動するgit init
でローカルリポジトリを作成する(空のディレクトリであることが条件)- GitHubでリモートリポジトリを作成する
- 表示されたURIをコピーする
git remote add origin URI
でリモートリポジトリを登録する- 作業する
Git Bash# ディレクトリを作成する $mkdir foobar # 先ほど作成したディレクトリにカレントディレクトリを移動する $cd foobar # ローカルリポジトリを作成する $git init # リモートリポジトリを登録する $git remote add origin https://github.com/hogefuga/foobar.gitまだ参加していない開発者が目的のブランチで作業を開始したい
- 参加するリポジトリを探す
- 表示されたURIをコピーする
git clone URI
でリモートリポジトリの内容をカレントディレクトリにダウンロードする(ディレクトリの構成は./REMOTE_REPOSITORY_NAME/.git
となる)cd REMOTE_REPOSITORY_NAME
で先ほど作成されたディレクトリにカレントディレクトリを移動するgit checkout LOCAL_BRANCH_NAME
で目的のローカルブランチに切り替える- 作業する
Git Bash# リモートリポジトリの内容をカレントディレクトリにダウンロードする $git clone https://github.com/xxx/foobar.git # 先ほど作成されたディレクトリにカレントディレクトリを移動する $cd foobar # 目的のローカルブランチに切り替える $git checkout add-fizzbuzz-funcすでに参加している開発者が目的のブランチで作業を再開したい
git checkout LOCAL_BRANCH_NAME
で目的のローカルブランチに切り替えるgit pull origin REMOTE_BRANCH_NAME
でリモートブランチの内容をローカルブランチに反映する- 作業する
Git Bash# 目的のローカルブランチに切り替える $git checkout add-fizzbuzz-func # リモートブランチの内容をローカルブランチに反映する $git pull origin add-fizzbuzz-funcバグやリクエストなどを対応したい
git checkout -b LOCAL_BRANCH_NAME
でローカルブランチを作成して切り替える- 作業する
Git Bash# ローカルブランチを作成して切り替える $git checkout -b add-fizzbuzz-func変更を記録したい
git add FILE_PATH
で変更したファイルをステージングする(git reset FILE_PATH
でアンステージ、git add .
で変更したファイルを再帰的にステージングする)git status
で変更記録対象のファイルを確認するgit commit -m "COMMENT"
で変更を記録するGit Bash# 変更したファイルをステージングする $git add main.js # アンステージする git reset main.js # 変更したファイルを再帰的にステージングする $git add . # 変更記録対象のファイルを確認する $git status # 変更を記録する $git commit -m "add fizzbuzz func"コードレビューしてもらいたい
- PG:
git push origin REMOTE_BRANCH_NAME
でローカルブランチの内容をリモートブランチに反映する- PG:場合によってはGitHubのユーザ名とパスワードが要求されるので入力する
- PG:コードレビューがGitHubのプルリクエスト機能を使ってコードレビューしてもらう
- PM:リモートリポジトリの
master
ブランチにマージする- PM:場合によっては使わなくなったリモートブランチを削除する
Git Bash# ローカルブランチの内容をリモートブランチに反映する $git push origin add-fizzbuzz-func参考文献
- サルでもわかるGit入門 - https://backlog.com/ja/git-tutorial/
- Git Reference - https://git-scm.com/docs
- いまさらだけどGitを基本から分かりやすくまとめてみた - https://qiita.com/gold-kou/items/7f6a3b46e2781b0dd4a0
- 投稿日:2020-01-25T03:13:19+09:00
windowsで、githubにpushするuserは資格情報にキャッシュされている
やろうとしたこと
gitbash on Windowsでgithubへpushなどを行っていたが
ふとgithubの別アカウントでpushしたいリポジトリがあったのでuserを切り替えようとした起きた問題
どう足掻いても、githubへpushするときのuserが切り替わらない。。。
gitbashで
git config --global user.name "chigau_user" git config --global user.email chigau_user@hogehoge.com"とかやったり、
C:\Users\Watashi\.netrc を削除したり、リポジトリをcloneし直すついでに
git clone https://chigau_user@github.com/chigau_user/...とかやったり。。。
Windows再起動したり。。。
散々やってもダメ。。。解決方法
やっとの思いで↓こちらにたどり着いたのですが、
https://qiita.com/mzkii/items/d47c37964c435a981114
こちとらWindows。。。
キーチェーンなんてないし。。。...あっ
ゆるさへんで!
ほんま!!時間返して。。。