1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【閲覧禁止】コマンドラインからリモートブランチを削除する【Git事故】

Last updated at Posted at 2018-11-19

押すなよ!

Gitに慣れない新卒の人達は絶対に、絶対に押してはいけないコマンド
コマンドラインからリモートブランチを削除するコマンド

# git push --delete origin <リポジトリ名>

考え方としては、nullで上書きですね。
これをやると、凄く叱られます。
288f53ae-3ae8-44b7-af3f-978665c79616.jpg

まだ助かる

実は、まだ助かります。
このコマンドが行うのは、該当に対するポインタを削除することだけです。
ポインタっていうのは、スナップショットがの位置情報みたいなものと思えばOKです。
ただ一応、やらかした際のタイムリミットもあるそうで調査してみます。

git reflog という神から与えられしコマンドを使うことで、過去のコミットハッシュ値と、
HEADという、作業しているローカルブランチへのポインタが確認できるのです。
HEADのおかげで、「一個前はどのブランチに向いてた?」とかが分かります。
最悪リモートブランチをコマンドラインから削除してしまった場合は、
 1.ログを見る → 2.チェックアウト で助かるんです。

# git reflog
# git checkout <対象のコミットハッシュ> -b <branch>

ans-380554750.jpg
git-reflog - Manage reflog information
https://git-scm.com/docs/git-reflog

オープンな世界

他にも、マージ済みのリモートブランチを全部削除するコマンドも見つけました~。
今回、参考にさせて頂いた方のコマンドが、めちゃくちゃ勉強になりました。

# git branch -r --merged master | grep -v -e master|sed -e 's% *origin/%%'| xargs -I% git push --delete origin %

下記を参考にさせて頂きました!!!
miukoba/gitでマージ済みの(リモート|ローカル)ブランチを全て削除.md
https://gist.github.com/miukoba/fc3c10a25c1c675c1e97

git branch -r --merged master | grep -v -e master -e develop | sed -e 's% *origin/%%' | xargs -I% git push --delete origin %

sedコマンドのs%

この%はなんなんだろうか...。調べたところ。
https://www.gnu.org/software/sed/manual/sed.html

sedコマンドの置き換え文字は何でもOKらしく、オプションsの次の文字を置き換え文字にするそうです。
これまで、むっちゃ¥¥してましたヨ〜。

[root@localhost git]# git branch -r --merged master | grep -v -e master
  origin/Test1
  origin/Test2
  origin/Test3
  origin/feat/master
[root@localhost git]#
[root@localhost git]#
[root@localhost git]# git branch -r --merged master | grep -v -e master|sed -e 's% *origin/%%g'
Test1
Test2
Test3
feat/master

xargsのオプション-I

[root@localhost git]# git branch -r --merged master | grep -v -e master|sed -e 's% *origin/%%g'| xargs -I % git branch -d %

参考にさせて頂いたコマンドですが、
複数削除していますね。

xargs -I% ~ %

この書き方、なんだろう。
むっちゃ代入してる感があります。
オプション-I???

困ったらmanだ!

[root@localhost git]# man xargs
-I replace-str
              Replace occurrences of replace-str in the initial-arguments with names read from standard input.  Also, unquoted blanks do not terminate input items; instead the separator is the new‐
              line character.  Implies -x and -L 1.

なにやら、

xargsコマンドの-I オプションでは、標準入力より渡されたデータを
xargs引数コマンド の、任意の位置の引数に展開することが可能

とのこと...。
こんな使い方あったんだ。
これは勉強になった!!

ちょっと引っかけて遊ぶとかもできますね~。
for文いらずにできるかも。

[root@localhost nekoatusme]# ls
neko.rb  sss
[root@localhost nekoatusme]#
[root@localhost nekoatusme]#
[root@localhost nekoatusme]# ls | xargs -Iaaa  echo aaa
neko.rb
sss
[root@localhost nekoatusme]#
[root@localhost nekoatusme]#

オワリはじまり

タイムリミットが存在するのも、Gitの世界です。
Gitの自動メンテナンスでガベージコレクション(gc)が行われるまでに復元せねばなりません。
GCはお掃除屋さんが色々綺麗にしてくれるあれです。
一応、かなりの量の未完了のオブジェクト or 差分情報がまとめられたパックファイルがないと
GCは走らないので大丈夫なんですが、これむっちゃ不安ですね~。

# git count-objects -v
# ll .git/objects/

大丈夫なものですが、確認もできるみたいですね。
commitして放置とかの無いよう忘れずに〜。

参考

1 Git のブランチ機能 - ブランチとは
https://git-scm.com/book/ja/v1/Git-%E3%81%AE%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E6%A9%9F%E8%83%BD-%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E3%81%A8%E3%81%AF

.7 Gitの内側 - メインテナンスとデータリカバリ
https://git-scm.com/book/ja/v1/Git%E3%81%AE%E5%86%85%E5%81%B4-%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9%E3%81%A8%E3%83%87%E3%83%BC%E3%82%BF%E3%83%AA%E3%82%AB%E3%83%90%E3%83%AA
Git は時々 "auto gc" と呼ばれるコマンドを自動的に実行します。大抵の場合、このコマンドは何もしません。もし沢山の緩いオブジェクト(パックファイルの中にないオブジェクト)があったり、あまりに多くのパックファイルがあると、Git は完全な(full-fledged)git gc コマンドを開始します。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?