gitのbranchで添付ファイルのようなことは可能なのでしょうか。

現在の運用パターンとしては1のような形で  
pushするとそのまま公開サイトに反映するのですが  
少し大きな変更をする際にバグがあればそのままに公開されてしまう状態です。

そこでブランチを公開用リポジトリに作りそちらを確認するようなことはできるのでしょうか。  
（パターン２）

またブランチからマージして本来はマスターをpushするのが  
一般的だと思いますが、pushしてバグが出てしまった場合  
ローカルのマージ前のマスターから再度pushしてバグ発生前の状態にすることは可能でしょうか。  
（パターン３）

今回大幅な変更がありローカルで作業をたくさんして  
（途中でローカルでaddだけは何回かしてしまった）  
一気にリモートへpushする必要がありこのようなことを考えてしまいました。  
もっと効率の良いお勧めのやり方がありましたらそちらもぜひ伺いたいです。  
よろしくお願いいたします。

[![画像の説明をここに入力](https://i.stack.imgur.com/jzPAU.png)](https://i.stack.imgur.com/jzPAU.png)
CC BY-SA 3.0
2017-02-07T04:40:28.397
32450
2018-03-26T02:18:54.763
19992
question
git
gitでbranchの使い方
> そこでブランチを公開用リポジトリに作りそちらを確認するようなことはできるのでしょうか。

そちらでの運用され方次第ですが、できます。  
確認用のリモートブランチを作成してください。

> またブランチからマージして本来はマスターをpushするのが 一般的だと思いますが、pushしてバグが出てしまった場合  
>  ローカルのマージ前のマスターから再度pushしてバグ発生前の状態にすることは可能でしょうか。

一般的かどうかはわかりませんが、developやdeployといった用途に応じたリモートブランチを用意するプロジェクトが多い気がします。

  * 例：developブランチには各開発者がpush可能、deployは権限を持ったメンバーがpush可能、masterにpushできるのはリーダのみ、等

また、一度リモートにpushしてしまったコミットを削除すると履歴が壊れるため、他にそのコミットを参照している人がいると迷惑をかけてしまいます。取り消したい場合はrevertコミットを作成した方が良いでしょう。
CC BY-SA 3.0
2017-02-07T05:11:38.973
32451
2017-02-07T07:19:35.217
2017-02-07T07:19:35.217
20272
20272
32450
answer
まず、気になったことが。

  1. 今現在の運用フロー(パターン1)の、図がおかしいような気がします。ローカルから push される先のレポジトリが"ベア"になっていて、かつ「本番サーバー」だからです。

ベアレポジトリは、以降に述べる git
のレポジトリの持つ機能の中で、「手元のファイルシステム」を作らない形式のレポジトリです。なので、サーバーがここにあるファイルを直接読み込んで何かしらの操作を行うのはおかしい、気がします。

むしろ、このサーバーは、 github や gitlab などといった、レポジトリサーバーのことではないでしょうか。

* * *

仮に、今回の運用フローが、「ローカル」<->「レポジトリサーバー」<->「本番サーバー」の構成であったとして。そうすると、本番サーバーは、定期的にレポジトリサーバーから
pull するスクリプトが実行されていると考えられます。

## パターン２について

可能です。手元からは mybranch を push します。本番サーバーでは、 pull するスクリプトを、 レポジトリサーバーの mybranch
から、本番サーバーへの mybranch へ pull するように書き換えればよいです。

## パターン3について

git は、実はどのブランチからでも、どのリモート上のブランチに対しても push できます。

```

    git push remote-name local-branch:remote-branch
    
```

です。なのでこれを使えば、できると言えばできますが、素直にローカルとリモートのブランチを一致させた方がよいと思います。無駄に面倒になると思われるので。。

* * *

# git のレポジトリとは

git においてレポジトリとは、「作業用ワークディレクトリ」+「バージョン管理用の情報」から構成されます。  
ベアレポジトリとは、このうち「作業用ワークディレクトリ」を持たない構成にしたレポジトリです。

本番サーバーは、実際に git
にコミットした、コードベースの中身を読み込み実行すると、実際にサーバーとして動作するような構成になっているマシンだと考えられます。ベアレポジトリは、 git
がバージョン管理用に作成する情報ファイルしか持たないので、本番サーバーがこのレポジトリを読んで動作することは、ないのではないかと考えています。
CC BY-SA 3.0
2017-07-06T17:56:38.380
36163
2018-02-03T14:36:46.990
2018-02-03T14:36:46.990
3060
754
32450
answer