Gitのコマンドメモ 表題どおりの件、リモートリポジトリのタグ名とブランチ名が同名の場合以下の様なエラーが出た error: dst refspec <tag_name> matches more than one. error: failed to push some refs to 'git@gitlab:<repo_name>.git'
![[Git] remoteのtagとbranchの名前が同じ場合の消し方 - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/efe58336189def2f9c3d18c88c0566a80ad406d6/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9JTVCR2l0JTVEJTIwcmVtb3RlJUUzJTgxJUFFdGFnJUUzJTgxJUE4YnJhbmNoJUUzJTgxJUFFJUU1JTkwJThEJUU1JTg5JThEJUUzJTgxJThDJUU1JTkwJThDJUUzJTgxJTk4JUU1JUEwJUI0JUU1JTkwJTg4JUUzJTgxJUFFJUU2JUI2JTg4JUUzJTgxJTk3JUU2JTk2JUI5JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmcz00ZTI5OTAwZGM2NTY2MmFiODRjOWY2OTIwNzljOGE3Nw%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBrb2FyYS1sb2NhbCZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9ZTk3NjkxMjcwNTQxZDY0ZTg5MGQzMWYxNzdhMmRjMmI%26blend-x%3D142%26blend-y%3D436%26blend-mode%3Dnormal%26txt64%3DaW4g44Oq44OD44Kv44K944OV44OI5qCq5byP5Lya56S-%26txt-width%3D770%26txt-clip%3Dend%252Cellipsis%26txt-color%3D%2523212121%26txt-font%3DHiragino%2520Sans%2520W6%26txt-size%3D36%26txt-x%3D156%26txt-y%3D536%26s%3D8fdfee61bbb151d364558a8128e98bdd)
GithubでWebのGUIからマージしようとすると「Create a merge commit」、「Rebase and merge」、「Squash and merge」の選択肢があります。この記事では、それぞれのマージの動作の違いと使いどころをまとめました。 GithubのWebからのマージ GithubでPull requestをいただいてマージしようとすると以下の3種類が表示されます。 Create a merge commit Rebase and merge Squash and merge この動作の違いをまとめました。 前提 説明するに当たりマージする前の状態を以下の状態として進めていきます。これはAのリポジトリからBがforkして、2つコミットした後にAにPull requestを出して、取り込まれるのを待っている状態だと思ってください。 また、BがY、Zの変更をしてい
本連載「こっそり始めるGit/GitHub超入門」では、バージョン管理システム「Git」とGitのホスティングサービスの1つ「GitHub」を使うために必要な知識を基礎から解説していきます。具体的な操作を交えながら解説していきますので、本連載を最後まで読み終える頃には、GitやGitHubの基本的な操作が身に付いた状態になっていると思います。 前回記事「たった3つで共存できる、Git/GitHubとSubversion(SVN)の連携、移行に関する基本操作」では、Subversionとの連携や移行について解説しました。 本連載の最終回となる今回のテーマは「Git/GitHubのワークフロー」です。幾つか存在するバージョン管理のワークフローのうち「git-flow」「GitHub Flow」の概要を解説します。 git-flow 「git-flow」はVincent Driessen氏の「A
DevOpsをさらに推し進めた「GitOps」という開発手法が、KubeCon+CloudNativeConが紹介された。 KubeCon+CloudNativeConではKubeflowやIstioなどの多くのプロジェクトが紹介され、まるでKubernetesのエコシステム展覧会と言ってもいいほどだ。その中から今回は、WeaveworksのCEO、Alexis Richardson氏が提唱するGitOpsについて紹介したい。Richardson氏は、Cloud Native Computing Foundation(以下、CNCF)のTechnical Oversight Committeeのチェアも務めている人物だ。 Richardson氏は、クラウドによってDevOpsへの流れが生じたと語り、その先にあるのは「Push Code, Not Container」とあるように開発者が「コ
みなさん、git diffしてますか?patchを作成するときに便利ですよね。 しかし、コミット前の状態でgit diffすると、新規作成したファイルは反映されず、patchを当ててもビルドエラーなんて悲しいことになった事がある方も多いと思います。 そんなときはgit add -N FILENAMEをすれば解決。 新規追加したファイルとマークをつけることができ、git diffの結果に含まれるようになります。 注意点ですが、コミット前の状態で普通にgit diffすると、追加ファイルがnew fileにならないので、git diff HEADを実行する必要があります。 $ git diff // 変更点無し // ファイル追加 $ echo "HogeHoge" > file2.txt // 差分確認 $ git diff // 変更点無し // git add -N実行 $ git ad
以前は問題なく動いていたはずの機能が、最新版では動かなくなっている・・・。こんなときは、「どのコミットが問題を混入させてしまったのだろうか?」を知りたくなるでしょう。 これを手助けするのが git bisect コマンドです。git bisect コマンドは、二分探索によって問題箇所を特定します。 事前準備 最初に大事なことがひとつあります。それは、「問題がない(good)状態と問題がある(bad)状態を、確実に判定できるようにする」 ことです。 当然のことではありますが、ここがあやふやだと、二分探索をしても問題箇所をうまく特定できません。 可能なら、「テストスクリプトを1つ実行するだけで判定」できるようにしたほうが良いです。このとき、テストスクリプトは、git リポジトリからチェックアウトした作業ツリーに対して実行できるようにします(例えばソースからのビルド処理もテストスクリプトに含めま
仕事とプライベートとで別々のGitアカウントを使用する必要が出てきた際に、プライベートと仕事での開発とで環境を切り替えがわりと面倒だったので、今後迷わないように記録する。 アカウントの新規作成(ざっくり) 1. 新しいメールアドレスでGithubアカウントを作る 2. sshキーを作る ~/.ssh/conifgファイルに下記の様なフォーマットで秘密鍵のパスを指定する。 Host github HostName github.com IdentityFile ~/.ssh/main_rsa User git Port 22 TCPKeepAlive yes IdentitiesOnly yes Host github-sub HostName github.com IdentityFile ~/.ssh/sub_rsa User git Port 22 TCPKeepAlive yes I
概要 OSSのメンテナっぽいことをやるとき、githubで特定のpull requestの正当性を確認したいということがあると思う。ブランチチェックアウトすれば良くね?って単純に考えていたけど、結構面倒くさかったので、メモっとく。 やり方 とりあえず、repositoryをcloneして、branchを見てみる。 $ git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/feature/support_gemfile remotes/origin/master remotes/origin/test_1.0.0
と行うとコンフリクトが発生しrebase動作が一時停止する。 ここで、BranchAに存在するaの変更をすべて適用したかったので、「BranchBにいたからgit checkout --theirs hoge.txtでしょ」としてgit add hoge.txtしてgit rebase --continue。 しかし最終的に出来てきたのはBranchBのcの変更をすべて適用した結果であった。 やりたい事をやるためには 結論としては、コンフリクトが発生してrebaseの元(BranchA)を適用する際には、git checkout --ours hoge.txtとするべきであった。 動作を見た結果、おそらく以下のようになっている。 rebaseの元となるブランチ(master)に現在のBranchを移す rebaseされるブランチ(BranchA)との共通コミット(o)から順次変更を取り込む
2019年8月にリリースされた Git 2.23 から,Experimental(実験的機能)として新コマンド git switch と git restore が使える.今までずっと使ってきた git checkout は機能が多すぎたため,機能を分割し git checkout の代替としてリリースされた.個人的にリリースされてから,できる限り git switch と git restore を使うようにしてるけど,まだ無意識に git checkout を使ってしまうこともある.最近 git switch を教える機会があったため,ブログにまとめておく. github.blog なお,以下の検証は Git 2.26.0 を使った. $ git --version git version 2.26.0 1. git switch を使う git switch を使って「ブランチ操作」
bareリポジトリは「ワーキングディレクトリ」が存在しないリポジトリを指します。要するに実態のファイルが存在せずに、履歴情報やブランチ・タグとかそういった情報のみのリポジトリ。慣習的にディレクトリ名の末尾を.gitにします。 GitLabとかGitBucketとかも、gitの機能だけに言及すれば中身はこの末尾に.gitが付いたbareリポジトリをユーザーとかグループごとに管理して、Webページで表示しているだけ。GitHubももちろんそのはず。 リポジトリに対する操作はnon bareリポジトリから行います。 gitは分散型リポジトリなので、厳密には中央リポジトリは存在しません。が、それだと複数人、複数マシンで開発するときに不便なので「このリポジトリを中央にしましょ~ね~」というルール上のリポジトリを設けることになります。それが中央リポジトリ。従って、別に個人で履歴管理だけしたいなら、別に
[2016/12/19追記]「「MBAでスクリプトを書き、リモートサーバ上で実行する」をGitで実現する - Qiita」を公開しました。ここと同じ仕組みでWordpressでなくRubyスクリプトを管理する方法です。 早く公開したかったのに思いのほかハマってちょー頑張った@nekotricolorです。 「バージョン管理システムとは何か〜GitとSubversionの違い」からの「VirtualBox上にインストールしたUbuntuにSSHで接続する」の続きです。 この記事には理屈しか書いていませんので、実際の設定は「ベアリポジトリとノンベアリポジトリ:実践編〜GitでWordpressのテーマを管理」を参照ください。 お題:「Gitを使って、本番環境のWordpressのテーマを、複数のPC上にあるローカルのテスト環境で確認してから更新できるようにする」 ノンベア(non-bare)リ
自分のプライベートリポジトリをgo getすると以下のようなエラーが発生する。 $ go get github.com/jnst/my-private-repo # cd .; git clone https://github.com/jnst/my-private-repo /Users/jnst/go/src/github.com/jnst/my-private-repo Cloning into '/Users/jnst/go/src/github.com/jnst/my-private-repo'... fatal: could not read Username for 'https://github.com': terminal prompts disabled package github.com/jnst/my-private-repo: exit status 128 原
IDEでプロジェクトを作成すると、".idea/"と"[project-name].iml"が作成される。 Gitでプロジェクトのソースコードを管理するとき、管理対象(除外対象)の設定はどのようにしたらよいのか。 公式ドキュメントがあった https://intellij-support.jetbrains.com/hc/en-us/articles/206544839-How-to-manage-projects-under-Version-Control-Systems ネット上では".idea/"をgitignoreに書いて、このディレクトリ配下のすべてのファイルを管理外にしている例が多かったが、それは適切ではないようだ。 上記のドキュメントによると、".idea/"内の"workspace.xml"、"tasks.xml"以外のファイルは、すべてGitのリポジトリに入れてシェアすべ
モバイルアプリエンジニアの山下です。 チームで開発を進める上でちょっとした"決まりごと"が存在すると思います。 例えば、LCLの開発チームには以下の"決まりごと"が存在します。 コミットメッセージの先頭にはYouTrackのIssue番号を付ける RuboCopで設定したコーディングスタイルになるべく従う masterへ直接PUSHはしない これらを全員が心がけることで運用効率や品質を保つようにしていまが、とはいえコミットする度にIssue番号を入力したり、RuboCopのコマンドを打ったりするのは非常に面倒です。 そこで今回は「git hooks」を利用してコミットやプッシュのタイミングで自動的に実行されるようにしました。 git hooksとは コミットやプッシュなどのgit操作をトリガーにしてスクリプトを実行する機能です。 .gitディレクトリ内にhooksという名前のディレクトリで
# テンプレートディレクトリを作成 $ mkdir -p ~/.git_template/hooks # テンプレートを読み込む $ git config --global init.templatedir '~/.git_template' # pre-commit スクリプトを作成 (中身は下に記載) $ touch ~/.git_template/hooks/pre-commit # commit-msg スクリプトを作成 (中身は下に記載) $ touch ~/.git_template/hooks/commit-msg # 実行権限を付与 $ chmod a+x ~/.git_template/hooks/pre-commit $ chmod a+x ~/.git_template/hooks/commit-msg # 適当なディレクトリを作成 $ mkdir git-hooks
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く