開発

来月からチーム開発するのでGitのまとめ

 

 

 

Git Guiクライアント

ユーザが多くて情報が得られやすいのでSourcetreeを選択。

 

Gitまとめ

 

チーム開発しぐさ

VS Codeでコーディングしながら、SoucetreeでGitの操作をする。Gitについてコマンドでも良いがGUIで確認しながらの方が間違いにくい、早い。

  1. originからpullする
    $ git pull origin master
    →conflictしていたらローカルを修正してマージする。
    新人であれば自分のコードより他のメンバーを優先させる形でマージする。
  2. 開発する
  3. ステージングにファイルをあげる
    $ git add <指定ファイル>
  4. コミットする
    $ git commit <指定ファイル>
  5. originからpullする
    $ git pull origin master
  6. オリジンにpushする
    $ git push origin master

ローカルをリモートと同期させるしぐさがチーム開発では大切。

 

開発しているブランチにmasterの最新を取り込む

 

①GitLab上でissueを作成する

#999
Add hoge API

②GitLab上でブランチを作成する

issueの名前に合わせる

594-Add-hoge-API

このブランチで作業する

→ブランチの開発が終わった。

③ローカル作業

作業ブランチにmasterの最新を取り込む

$ git checkout master
$ git pull

ブランチを切り替え

$ git checkout 999-Add-hoge-API

masterをマージする

$ git merge master

これで作業ブランチにmasterの状況がmergeされた。
作業中のファイルはそのままです!

 

 

ブランチの使い分け

  • feature
    開発用ブランチ
  • develop
    表示や動作確認
  • maser
    本番

Gitlab-flowを採用。複数のfeatureブランチで開発して、developにマージリクエストを送る流れ。

 

git revert

resetではなく、revertを利用する。

  • 最新のものに対して消すというコミットを行う
  • リモートにやっても良い

 

厳禁 git reset

  • リモートにあげたものには絶対にresetを行ってはいけない。
    ※ローカルだけにする

 

  • hardは危険。
    working directoryも消してしまう。使ってはいけない。
    working directoryは選択しないほうが良い

コミットログがあれば戻せるが、hardを行ってしまうと戻せなくなる。怖い怖いなのだ。

 

ローカルルールで禁止されているコマンド

  • git rebase
  • git reset
  • git cherry-pick

履歴がわかりづらくなるから利用しない。

 

チーム開発でコンフリクトしたらどうする?

チーム内の権力が重要。自分はどこにいるのか?

  • 自分がメンバーかつ新人
    他のメンバーやリーダーのコミット内容を優先
  • 自分がリーダやレビューする役割
    自分が優先

 

 

 

HEADに戻す

$ sudo git reset --hard HEAD

 

 

チェリーピック

他のブランチのコミットをマージしたい

$ git cherry-pick <コミットID>

Sourcetreeの場合は右クリックから指定のコミットを取り込む

 

 

branch開発

 

●developブランチ

developブランチの作成
$ git branch develop

developブランチに移動
$ git checkout develop

・・・作業する

ローカルにコミット
$ git add .
$ git commit -m "Done!"

Githubにpush!
$ git push origin develop

 

●masterブランチ

masterブランチに移動する
$ git checkout master

developブランチの作業をmasterブランチにマージする
$ git merge develop

 

ローカルのdevelopブランチを削除

$ git branch -d develop

通常はこれでOK

 

 

消せない場合は下記で

$ git branch -D develop

 

 

 

※git merge developでのエラー

$ git merge develop

Updating 917d991..ab4ca75
error: Your local changes to the following files would be overwritten by merge:
        schemaspy/diagrams/summary/relationships.real.compact.dot

・・・

        schemaspy/tables/users.html
Please commit your changes or stash them before you merge.

 

masterにコミットして

$ git add .
$ git commit -m "schemaspy"
$ git merge develop

 

リモートリポジトリmasterブランチにpushする

$ git push origin master

 

 

ひやりはっと戻す

ローカルリポジトリをある地点まで戻したい

$ git checkout <ハッシュ値>

 


ローカルリポジトリをある地点まで戻し、リモートリポジトリも戻す※劇薬

$ git checkout <ハッシュ値>
$ git reset --hard <ハッシュ値>
$ git push -f origin HEAD^:master

 

コミットをまとめる

 

$ git log --graph --oneline

* 653a6fc (HEAD -> master, origin/master) SNSログイン修正4
* e2bcc40 SNSログイン修正3
* bd23f32 SNSログイン修正2
* 5e84824 SNSログイン修正1
* 972790b いったんコミット

 

$ git rebase -i 6787c39

pick 9767b45 自分が既に押しているいいねは赤く表示する #22 r3
-pick 6787c39 自分が既に押しているいいねは赤く表示する #22
-pick 0e94891 自分が既に押しているいいねは赤く表示する #22 r5
-pick 3b5e121 r6
-pick 919d4f1 いいね対応

+ s 6787c39 自分が既に押しているいいねは赤く表示する #22
+ s 0e94891 自分が既に押しているいいねは赤く表示する #22 r5
+ s 3b5e121 r6
+ s 919d4f1 いいね対応 

1つ以上pickを残してまとめたいコミットをsに変える

 

これで何事もなければ、

$ git push -f origin master

リモートリポジトリにpushして完了

 

※エラーが出た場合

error: cannot 'squash' without a previous commit
You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'.
Or you can abort the rebase with 'git rebase --abort'.

 

git rebase –continueでコンフリクトしたファイルが見れるので修正する。VS Codeだとここらへんの修正が楽。

それからgit add -AしてリモートにpushでOK

$ git add -A
$ git push -f origin master

 

なんか操作してミスしてりとかだったらrebaseの作業を破棄することで戻れる

$ git rebase --abort

 

 

issue機能

 

issue#<番号>でイッシュー用のブランチを作成し作業する

$ git branch issue#1
$ git checkout issue#1

 

commitする時にissue番号を入れるとリンクが作成される。

$ git add .
$ git commit -m "Done! Review.phpのgetList() 全件取得時のキャッシュ機能が抜けている #1"
$ git push origin issue#1

issueでcommit番号のハッシュ値を張ることで、リンクが出来る。

masterにも反映させる

masterブランチに移動
$ git checkout master

masterにissue#1をマージ
$ git merge issue#1

masterのリモートリポジトリ(GitHub)にもpushする
$ git push origin master

 

issue#1ブランチの削除

$ git branch -D issue#1

 

 

untrackedファイルを削除する

リポジトリに管理されていないファイル = 追跡対象外ファイル = untrackedファイル

フレームワークを利用していると自動生成されることがあり、なかなかお世話になるコマンド。

 

追跡対象外のファイルを確認(削除実行はしない)

$ git clean -n

 

追跡対象外のファイルを削除

$ git clean -f

 

追跡対象外のファイルとディレクトリを削除

$ git clean -df

 

 

Amazonおすすめ

iPad 9世代 2021年最新作

iPad 9世代出たから買い替え。安いぞ!🐱 初めてならiPad。Kindleを外で見るならiPad mini。ほとんどの人には通常のiPadをおすすめします><

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)