物理学者(ポスドク)による日々の研究生活のメモ書きです ( python/emacs/html/Japascript/シェルスクリプト/TeX/Mac/C言語/Linux/git/tmux/R/ポケモンGO)
git pullしたら以下のワーニングっぽいものが出た
hint: You have divergent branches and need to specify how to reconcile them.
hint: You can do so by running one of the following commands sometime before
hint: your next pull:
hint:
hint: git config pull.rebase false # merge
hint: git config pull.rebase true # rebase
hint: git config pull.ff only # fast-forward only
hint:
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.
hint: You can do so by running one of the following commands sometime before
hint: your next pull:
hint:
hint: git config pull.rebase false # merge
hint: git config pull.rebase true # rebase
hint: git config pull.ff only # fast-forward only
hint:
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.
詳しくはここ
■ 参考 : Git 2.27 での git pull 時の warning について
以下のコマンドを走らせておいた
git config --global pull.rebase false
PR
今回初めてgitlabでmerge requestを出したのでそのときに調べたメモ
■ 過去記事 : Git Labでマージリクエスト(プルリクエスト)をするまで
コマンドメモ
この後の作業は、gilabのページで行う
「create merge request」というボタンを押すと、merge requestができるようになる
どんな修正なのかコメントを書く
誰に承認して欲しいかなども選べる
承認されたら、自動的にbranchを削除をチェックしておくと良さそう
コマンドラインからもmerge requestもできるらしいが、それは使ったら追記する
ツイート
■ 過去記事 : Git Labでマージリクエスト(プルリクエスト)をするまで
コマンドメモ
# コードを修正する
# 新規ブランチを作成する(-bをつけると作成して移動もしてくれる)
% git checkout -b dev-hoge
# 今いるところを確認
% git branch
# いつものように編集内容を追加
% git add a.txt
% git add b.txt
# コメントを付けてcommit
% git commit -m "Added text file for bar"
# git push origin dev-hoge
# 新規ブランチを作成する(-bをつけると作成して移動もしてくれる)
% git checkout -b dev-hoge
# 今いるところを確認
% git branch
# いつものように編集内容を追加
% git add a.txt
% git add b.txt
# コメントを付けてcommit
% git commit -m "Added text file for bar"
# git push origin dev-hoge
この後の作業は、gilabのページで行う
「create merge request」というボタンを押すと、merge requestができるようになる
どんな修正なのかコメントを書く
誰に承認して欲しいかなども選べる
承認されたら、自動的にbranchを削除をチェックしておくと良さそう
コマンドラインからもmerge requestもできるらしいが、それは使ったら追記する
サーバーを再起動したら、急にgit logの日本語コメントが文字化けして表示されなくなった
?????
とか
<E3><E3><E3><E3><E3><E3><E3>
とかそんな感じ
たぶん、文字エンコードの話だろうと思って
echo $LANGとしてみるも、きちんとUTF-8が設定されている
その設定はきちんと ~/.zshrc の上でやってるので合ってそう
ぐぐってみると一番上に出てきた
localedef -f UTF-8 -i ja_JP ja_JP
をやってみるとうまくいった。要sudo
branch一覧をみる
hogeというbranchを作成してそのbranchに移動する
fooというbranchを元に、hogeというbranchを作成するとき
hogeというbranchを本家のリポジトリに登録する
hogeというローカルブランチを削除する
hogeというリモートブランチを削除する
ただ、これをしても他のユーザーの環境では表示が消えないらしい、どうしても消したいときは
git fetch -p
■ 参考 : 3.5 Git のブランチ機能 - リモートブランチ
に面白いことが書いてあったのでメモ
へぇ〜
ツイート
git branch -a
masterブランチに戻るgit checkout master
hogeというbranchを作成してそのbranchに移動する
git checkout -b hoge
fooというbranchを元に、hogeというbranchを作成するとき
git checkout -b hoge origin/foo
hogeというbranchを本家のリポジトリに登録する
git push -u origin hoge
hogeというローカルブランチを削除する
git branch -d hoge
hogeというリモートブランチを削除する
ただ、これをしても他のユーザーの環境では表示が消えないらしい、どうしても消したいときは
git fetch -p
git push --delete origin hoge
■ 参考 : 3.5 Git のブランチ機能 - リモートブランチ
に面白いことが書いてあったのでメモ
“origin” は特別なものではない
Git の “master” ブランチがその他のブランチと何ら変わらないものであるのと同様に、 “origin” もその他のサーバーと何ら変わりはありません。 “master” ブランチがよく使われている理由は、ただ単に git init がデフォルトで作るブランチ名がそうだからというだけのことでした。 同様に “origin” も、git clone を実行するときのデフォルトのリモート名です。 たとえば git clone -o booyah などと実行すると、デフォルトのリモートブランチは booyah/master になります。
Git の “master” ブランチがその他のブランチと何ら変わらないものであるのと同様に、 “origin” もその他のサーバーと何ら変わりはありません。 “master” ブランチがよく使われている理由は、ただ単に git init がデフォルトで作るブランチ名がそうだからというだけのことでした。 同様に “origin” も、git clone を実行するときのデフォルトのリモート名です。 たとえば git clone -o booyah などと実行すると、デフォルトのリモートブランチは booyah/master になります。
へぇ〜
ln -s /home/foo/hoge.txt .
みたいな感じで、fooさんが作ったhoge.txtを間借りして使ってた
ただ、hoge.txtは頻繁に更新されるし、安定して動くversionを自分のリポジトリに追加しておくと
あとでトラブったときに復旧が楽
で、このhoge.txtをgitに追加しようとすると、シンボリックリンクのまま追加されてしまう
自分がやってほしいのはリンク先まで見に行ってその内容をgitにアップしてほしいのだが・・・
そういうオプションがあると思って調べてみたがなさそう
■ 参考 : symbolic link - シンボリックリンクされたフォルダにgitコミットファイルを作成するにはどうすればよいですか
■ 参考 : version control - Gitはシンボリックリンクをどのように処理しますか?
gitの代わりにGitBSLRというコマンドをインストールして使うとかファイルの場所をgit内に移すとかが提案されてる
シンボリックリンクじゃなくて、ハードリンクを貼れば解決する?
と思って
ln /home/foo/hoge.txt .
としてみたけど、なぜかオリジナルのhoge.txtが更新されても手元にhoge.txtは更新されない・・・
ハードリンクは別のアカウントが作ったファイルだと機能しないのか?
それとも何か勘違いしてるのかも
(未解決)
【git】error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version というエラーが出た
2018.10.02 Tue 09:21 | git
2018.10.02 Tue 09:21 | git
リポジトリをcloneしようとしたら、次のようなエラーが出た
かなり古いマシーンだったので、ひとまずportでgitをアップデートすることにした
ググった感じ、それが解決方法っぽかったし
■ 参考 : Git error:1407742E
■ 参考 : GitHub への push/pull/clone が突然「error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version」エラーで使えなくなった件
(追記)
gitを個別にアップデートしようとしたが、エラーが出て最後までいかない
めんどくさくなったので
sudo /opt /opt_backup
としてから、gitをインストールしなおすことにした
インストールするソフト自体は多くないのですぐできるやろ・・・
ツイート
error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
元のgitのversionはgit version 1.8.5.2かなり古いマシーンだったので、ひとまずportでgitをアップデートすることにした
ググった感じ、それが解決方法っぽかったし
■ 参考 : Git error:1407742E
■ 参考 : GitHub への push/pull/clone が突然「error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version」エラーで使えなくなった件
(追記)
gitを個別にアップデートしようとしたが、エラーが出て最後までいかない
めんどくさくなったので
sudo /opt /opt_backup
としてから、gitをインストールしなおすことにした
インストールするソフト自体は多くないのですぐできるやろ・・・
まずはホスト側(sshして接続するサーバー)で作業をする
ディレクトリを作って、空っぽのリモートリポジトリを作る
複数人で共有するときのでsharedをつける
% mkdir hoge
% cd hoge
% git init --bare --shared
% cd hoge
% git init --bare --shared
次にクライアント側(手元のマシン)で作業をする
適宜、
somewhere_server をサーバーのアドレスに
hoge を↑で作ったリポジトリのパスに置き換える
git clone somewhere_server:hoge
あとはなんかファイルを作って、git add, git commit -m "", git pushすればOK
簡単だな
これで計算機同士の設定共有やソースコードの共有が捗るはず
■ 過去記事 : 【git】ひとつ前の状態に戻りたい git reset --soft HEAD^
と少し関係がある
git reset --soft HEAD^
で一つ前のコミットをする直前に戻ったとして、その中でgit rm hoge.c
としていた場合、この操作を取り消してコミットを分割とかしたいのにそもそもgit checkout hoge.c
ができない・・・・そういうときは
git reset HEAD hoge.c
git checkout hoge.c
でOKgit checkout hoge.c
git reset --soft HEAD^
で今、修正している他のソースコードはそのままにしてコミットだけを取り消すことができる例えばhoge.cを修正して
git add hoge.c
git commit -m "Added hoge.c"
という状態でgit commit -m "Added hoge.c"
git reset --soft HEAD^
すると、
hoge.cがまだcommitされていない状態に戻る
--softの代わりに、--hard もあるけどそちらはhoge.cの修正が完全になかったことになるので、
おそらくそちらを使いたい人はあまりいないはず
git status
とすると、configureで生成したファイルがワッサーーーと並ぶので、一番肝心の修正したファイルリストが隠れてしまうそこで
git status | more
としていたが、今度はcolorでなくなってしまう
ググったら解決方法が書いてあった
■ 参考 : git/git status|lessとかでカラー表示にならない件
git config --global color.branch always
git config --global color.diff always
git config --global color.interactive always
git config --global color.status always
git config --global color.diff always
git config --global color.interactive always
git config --global color.status always
でOK
このコマンドをどこでもいいので走らせると、~/gitconfigが書き換えられる
これらの設定が何かとコンフリクトして悪影響が出る場合は、以下のコマンドで元の設定に戻せる
git config --global color.branch auto
git config --global color.diff auto
git config --global color.interactive auto
git config --global color.status auto
git config --global color.diff auto
git config --global color.interactive auto
git config --global color.status auto
それは・・・たぶん無理だ・・・
■ 参考 : Gitの便利な-pオプション四兄弟
これは今行った修正を更地に戻すけど、後でそこに復旧できるようにする
ファイルを最新の状態に戻すときは、git checkout hoge.c でOK
git log -pは割と使ってる、これはそのコミットでの修正点を具体的に見れる
あとここには書いてないけど
git log --stat
ってのも便利だと思う
(2016/10/27 追記)
git add hoge.c -p
は全然使わないだろうとか言ってたけど、かなり便利なことに気づいて活用している
表示された部分をaddしたいときはy、したくないときはn
ちなみにgitさんが提示してくるadd部分の範囲が広すぎる場合は
y/nの他に表示されているsを押すと、さらに細かい範囲を指定し直してくれる
それで良ければyを押せばいい
ツイート
git add -p
で、1つのファイルを一度にコミットするんじゃなくて、1つのファイルの修正を分割してコミットすることができる■ 参考 : Gitの便利な-pオプション四兄弟
git stash -p
も便利そう(絶対に使いこなせないけど)これは今行った修正を更地に戻すけど、後でそこに復旧できるようにする
ファイルを最新の状態に戻すときは、git checkout hoge.c でOK
git log -pは割と使ってる、これはそのコミットでの修正点を具体的に見れる
あとここには書いてないけど
git log --stat
ってのも便利だと思う
(2016/10/27 追記)
git add hoge.c -p
は全然使わないだろうとか言ってたけど、かなり便利なことに気づいて活用している
表示された部分をaddしたいときはy、したくないときはn
ちなみにgitさんが提示してくるadd部分の範囲が広すぎる場合は
y/nの他に表示されているsを押すと、さらに細かい範囲を指定し直してくれる
それで良ければyを押せばいい
もらったメモにここで「git fetch origin hoge」をしてねと書いてあったがfetchって何?状態なので調べた
■ 参考 : Git 再入門 リモートリポジトリを使った作業
このページがとてつもなく分かりやすかった
自分みたいなアフォにわかるような文章を書いてくれて助かります・・・・
詳細が知りたいときは
fetchはリモートリポジトリから最新情報をローカルリポジトリに持ってくるコマンド
ワーキングツリーには反映されないので、現在編集中のファイルが変更されることはない
ここがおそらくgit pullした場合との一番の違いか
ここで、修正したログがどういう風に扱われるのかが少しわからない・・・
リモートリポジトリなので、そもそも手元のmasterとはまったく別のbranchとしてgit fetchは落としてくる(これが一番の違い)
リモートリポジトリを手元に落としてきたあとで、git mergeまでやってコンフリクトが起こる可能性があるのがgit pull
な〜るほど〜〜〜
git のコンフリクトとか恐ろしくて手をつけたくないわ・・・
■ 参考 : git pullは、fetchしてmergeするのと同じなのか?
ツイート
■ 参考 : Git 再入門 リモートリポジトリを使った作業
このページがとてつもなく分かりやすかった
自分みたいなアフォにわかるような文章を書いてくれて助かります・・・・
git remote
で、登録されているリモートリポジトリが一覧になる詳細が知りたいときは
git remote show [リモートリポジトリ名]
おそらく .git/configに書いてある情報と同じだと思うfetchはリモートリポジトリから最新情報をローカルリポジトリに持ってくるコマンド
ワーキングツリーには反映されないので、現在編集中のファイルが変更されることはない
ここがおそらくgit pullした場合との一番の違いか
ここで、修正したログがどういう風に扱われるのかが少しわからない・・・
リモートリポジトリなので、そもそも手元のmasterとはまったく別のbranchとしてgit fetchは落としてくる(これが一番の違い)
リモートリポジトリを手元に落としてきたあとで、git mergeまでやってコンフリクトが起こる可能性があるのがgit pull
な〜るほど〜〜〜
git のコンフリクトとか恐ろしくて手をつけたくないわ・・・
git fecth
git fecth [リモートリポジトリ名]
git fecth [リモートリポジトリ名] [branch名]
という使い方があるgit fecth [リモートリポジトリ名]
git fecth [リモートリポジトリ名] [branch名]
git fetch --all
ですべてのリモートブランチをfetchする■ 参考 : git pullは、fetchしてmergeするのと同じなのか?
実は git pull はC言語で実装されていません。git-pull.shというシェルスクリプトです。
へぇ〜結論
git pullに、何も引数を付けずに実行した場合、git fetchしてgit mergeするのと同義であると確認できました。
伝説は本当でした。
だそうだgit pullに、何も引数を付けずに実行した場合、git fetchしてgit mergeするのと同義であると確認できました。
伝説は本当でした。
git add -u
今までは、
git status | head -30
git add hoge
git add foo
...
としてたのがほんとアフォだった・・・・git add hoge
git add foo
...
そんなやつおる〜?(私です)
hogehogeというのはgitのコミットに割り当てられたID
fooはコミットメッセージ
こういう最新のHEADから切り離された状態をdetauched HEADというらしい
ここから、最新の状態に戻るためには
危うくタイムマシーンに乗れないところだった・・・・・
ツイート
% git checkout hogehoge
Note: checking out 'hogehoge'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b
HEAD is now at hogehoge... foo
伏せ字ばっかりで申し訳ないですが、こんな感じで過去のコミットに遡ることができるNote: checking out 'hogehoge'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b
HEAD is now at hogehoge... foo
hogehogeというのはgitのコミットに割り当てられたID
fooはコミットメッセージ
こういう最新のHEADから切り離された状態をdetauched HEADというらしい
ここから、最新の状態に戻るためには
git checkout master
でOKらしい危うくタイムマシーンに乗れないところだった・・・・・
まだgit pushしていない場合は簡単に書き換えられた
■ 参考
git/コミットログを修正する方法
ツイート
% git commit --amend -m "fixed xxx bug, refs #10"
git pushしてたらたぶん大変・・・・■ 参考
git/コミットログを修正する方法
調べてみたらMacのキーチェーンを使う方法があるらしい
git config --global credential.helper osxkeychain
とコマンドを打つglobalにしたくない(特定のgit repositoryでのみ有効にしたい)ときは、--globalオプションを外しておく
■ 参考
GitリポジトリにHTTPSでアクセスするときにパスワード入力を不要にする
■ 参考リンク
git clone 使い方
最新versionのみを配布するときはこのコマンドを使う?
gitの記事が増えてきたので、gitというカテゴリを作りましたー
ツイート
git clone 使い方
$ git clone --depth 1 "repository URL"
ただし、この方法でcloneしてきたリポジトリからは新たにpushすることはできないらしい最新versionのみを配布するときはこのコマンドを使う?
gitの記事が増えてきたので、gitというカテゴリを作りましたー
完全に自分用のコマンドのメモ
■ 参考リンク
【Git】基本コマンド
だいたい必要なコマンドは↑のページにまとめられている
他にも
■ 参考
美しき git log --graph のエイリアス
これに関連して、こういうのもある
■ 参考 :共有レポジトリにPushしてしまったコミットをやり直す
■ 参考 :[Git] git repository size を削減する
(2018/04/19 追記)
便利そうなサイトがあったのでメモしておく
■ 参考 : 今日からはじめるGitHub 〜 初心者がGitをインストールして、プルリクできるようになるまでを解説
ツイート
■ 参考リンク
【Git】基本コマンド
だいたい必要なコマンドは↑のページにまとめられている
他にも
$git log --graph --stat
もしくは
$ git log --graph
もかなり便利なコマンドだと思うもしくは
$ git log --graph
■ 参考
美しき git log --graph のエイリアス
これに関連して、こういうのもある
$git log --oneline
■ 参考 :共有レポジトリにPushしてしまったコミットをやり直す
■ 参考 :[Git] git repository size を削減する
(2018/04/19 追記)
便利そうなサイトがあったのでメモしておく
■ 参考 : 今日からはじめるGitHub 〜 初心者がGitをインストールして、プルリクできるようになるまでを解説
残念ながら、この問題はまだ解決していません
色々とどん詰まりで、解決できそうにないのでひとまずメモとしてまとめておく
例えば意図せず大容量のファイル(hoge.txt)をコミットしてしまったとする
すぐにそれは間違いだと気づいて
.git以下にきちんと履歴として残っている
gitでは基本的に過去のコミットを消すことはできない
なぜなら、そういうことをすると他の開発者の手元で整合性が取れないことになるから
そこで1つ考えられるのが
これで消したいコミットを打ち消すようなコミットをしてくれる
しかし今回自分がやりたいのはそうではなくて、大容量のファイルを過去のコミットから完全に削除したい
過去のあるコミットの、さらに1部分だけを取り出して修正するのはいろいろと大変
最悪リポジトリの整合性を破壊してしまいかねない危険なことなのには重々注意しておくこと
なので
バックアップを取るなり、branchを切るなり、別のディレクトリでgit cloneして作業するなりするべし
■ 参考になりそうなページ
git最強のオプション filter-branch
[Git] git repository size を削減する
Maintaining a Git Repository
gitリポジトリを軽くしよう!
最強のオプション: filter-branch
特に上から2番目が一番自分がやりたいことを体現してくれていそうな記事
まずは3番目の記事から シェルスクリプト git_find_big.sh というのを落としてくる
左端の列がファイルサイズ(おそらく単位はキロバイト)
これをコミットログの中から探し出して、完全に亡き者にする
最初に表示されたファイルサイズ程度(もしくはそれ以上)の容量が減っているはず
と、ここまではいいのだが
上記のコマンドを走らせる前後でコミットログを見比べると、コミットのハッシュが書き変わっている・・・
そんなことはおかまいなしに
と、ここで詰まってしまっている・・・
このあと色々と試してみたがどうにもうまくいかず・・・
今の自分の現状について、わかりやすい解説を見つけた
Gitリポジトリのディレクトリ構成を変更する
↓ 引用
もはや新しいリポジトリを作った方が早い気がしてきた・・・
おそらく1つ前のコミット程度であればすぐに修正できるが
1ヶ月以上前のコミットなので、そのコミットを完全に削除しても、それはもう現状復帰ではなく「リポジトリ自体を新しく作り直して、古いリポジトリは破棄する」ということなんだろう・・・
何か解決方法をご存知の方は教えてください
ツイート
色々とどん詰まりで、解決できそうにないのでひとまずメモとしてまとめておく
例えば意図せず大容量のファイル(hoge.txt)をコミットしてしまったとする
すぐにそれは間違いだと気づいて
$ git rm hoge.txt
とするも時既に遅し.git以下にきちんと履歴として残っている
gitでは基本的に過去のコミットを消すことはできない
なぜなら、そういうことをすると他の開発者の手元で整合性が取れないことになるから
そこで1つ考えられるのが
$ git revert
というコマンドこれで消したいコミットを打ち消すようなコミットをしてくれる
しかし今回自分がやりたいのはそうではなくて、大容量のファイルを過去のコミットから完全に削除したい
過去のあるコミットの、さらに1部分だけを取り出して修正するのはいろいろと大変
最悪リポジトリの整合性を破壊してしまいかねない危険なことなのには重々注意しておくこと
なので
バックアップを取るなり、branchを切るなり、別のディレクトリでgit cloneして作業するなりするべし
■ 参考になりそうなページ
git最強のオプション filter-branch
[Git] git repository size を削減する
Maintaining a Git Repository
gitリポジトリを軽くしよう!
最強のオプション: filter-branch
特に上から2番目が一番自分がやりたいことを体現してくれていそうな記事
まずは3番目の記事から シェルスクリプト git_find_big.sh というのを落としてくる
$ chmod +x git_find_big.sh
$ ./git_find_big.sh
で一番ファイルサイズが大きいものを探す$ ./git_find_big.sh
左端の列がファイルサイズ(おそらく単位はキロバイト)
これをコミットログの中から探し出して、完全に亡き者にする
$ git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch hoge.txt" --prune-empty -- --all
上記スクリプトを参考にしてhoge.txtの部分を消したいファイルを置き換える$ git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
$ /bin/rm -rf .git/refs/original/
$ git reflog expire --expire=now --all
$ git gc --aggressive --prune=now
で、削除したかった hoge.txt がリポジトリからなくなるはず$ /bin/rm -rf .git/refs/original/
$ git reflog expire --expire=now --all
$ git gc --aggressive --prune=now
最初に表示されたファイルサイズ程度(もしくはそれ以上)の容量が減っているはず
と、ここまではいいのだが
上記のコマンドを走らせる前後でコミットログを見比べると、コミットのハッシュが書き変わっている・・・
$ git log
で一番上に出てくる英数字の並びのことそんなことはおかまいなしに
$ git push --all --force
としてみましたが、remote: error: denying non-fast-forward refs/heads/master (you should pull first)
To https://xxxxxx
! [remote rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'https://xxxxxx'
のようなエラーが出てうまくいかない・・・・To https://xxxxxx
! [remote rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'https://xxxxxx'
と、ここで詰まってしまっている・・・
このあと色々と試してみたがどうにもうまくいかず・・・
今の自分の現状について、わかりやすい解説を見つけた
Gitリポジトリのディレクトリ構成を変更する
↓ 引用
ここでいくつか注意点を述べる。
上記コマンドは、現在のブランチの履歴のみを書き換える。
リポジトリ内に複数のブランチが存在していた場合、他のブランチとの整合性は失われる。(もちろんoriginとの整合性も失われる。)もはや古いブランチと履歴ツリーを共有することはできない。
正確に言うと、他のブランチが持つ書き換え前のコミットと、現在のブランチが持つ書き換え後のコミットは完全に別々のコミットとして扱われる。コミットのハッシュ値が以前と変わっていることに注目してほしい。
-allオプションをつければ、リポジトリ内の全てのブランチに対して変更を適用することができる。
-allオプションによって、同リポジトリ内のブランチの整合性は保たれる。しかしこの方法でも、外部のリポジトリ(要するにorigin)との整合性を失うことは避けられない。
要するにこの操作は、リポジトリ自体を新しく作り直して、古いリポジトリは破棄する方法であると考えるべきである。
↑引用おわり上記コマンドは、現在のブランチの履歴のみを書き換える。
リポジトリ内に複数のブランチが存在していた場合、他のブランチとの整合性は失われる。(もちろんoriginとの整合性も失われる。)もはや古いブランチと履歴ツリーを共有することはできない。
正確に言うと、他のブランチが持つ書き換え前のコミットと、現在のブランチが持つ書き換え後のコミットは完全に別々のコミットとして扱われる。コミットのハッシュ値が以前と変わっていることに注目してほしい。
-allオプションをつければ、リポジトリ内の全てのブランチに対して変更を適用することができる。
-allオプションによって、同リポジトリ内のブランチの整合性は保たれる。しかしこの方法でも、外部のリポジトリ(要するにorigin)との整合性を失うことは避けられない。
要するにこの操作は、リポジトリ自体を新しく作り直して、古いリポジトリは破棄する方法であると考えるべきである。
もはや新しいリポジトリを作った方が早い気がしてきた・・・
おそらく1つ前のコミット程度であればすぐに修正できるが
1ヶ月以上前のコミットなので、そのコミットを完全に削除しても、それはもう現状復帰ではなく「リポジトリ自体を新しく作り直して、古いリポジトリは破棄する」ということなんだろう・・・
何か解決方法をご存知の方は教えてください
今まで
とふと気になったので調べてみた。
答えは下のリンク先にまとめられていた
Git の基本 - コミット履歴の閲覧
簡単にまとめると
文章で書くのは難しいので、ひとまず試しに入力してみるとよく理解できると思う・・・
ツイート
$ git log
しか使ったことなかった$ git pull
したときに出てくるような+++とか---があるようなlogを表示させることができるのかな?とふと気になったので調べてみた。
答えは下のリンク先にまとめられていた
Git の基本 - コミット履歴の閲覧
簡単にまとめると
# 直近の1エントリについてのdiffなどを表示させる
$ git -p -1
# 直近の1エントリについてのdiffなどを表示させる
$ git log --stat -1
# 今までのlogをそれぞれ1行で出力する
$ git log --pretty=oneline
とりあえずこんな感じ?$ git -p -1
# 直近の1エントリについてのdiffなどを表示させる
$ git log --stat -1
# 今までのlogをそれぞれ1行で出力する
$ git log --pretty=oneline
文章で書くのは難しいので、ひとまず試しに入力してみるとよく理解できると思う・・・
空のディレクトリに、空のファイル .gitkeep というのを置いておくのが流儀らしい
git はきちんとそのファイルを認識してくれるので大丈夫
空のディレクトリをgitで管理するには.gitkeepを使う
ツイート
git はきちんとそのファイルを認識してくれるので大丈夫
touch .gitkeep
■ 参考空のディレクトリをgitで管理するには.gitkeepを使う
warning: push.default is unset; its implicit value is changing in Git 2.0 from 'matching' to 'simple'.
(一部分しかエラーメッセージを残していなかった・・・)解決方法は簡単で、
git config --global push.default simple
としておけばよい■ 参考
git push時に表示されるwarning: `push.default is unset...`の意味と解決方法
.gitignoreを活用しましょう
このファイルに書いたファイルは git add する対象にはなりません
つまりディレクトリを一括でgit addしたときしても.DS_Storeはアップロードされません
.gitignoreの書き方
このファイルは、
gitで同期しているディレクトリ自身に.gitignoreを置いてもいいですし、
ホームディレクトリに.gitignoreを一つ置いて、それをglobalな設定にしてしまうのもいいかもしれません
globalな設定にする場合は
グローバルな.gitignore を設定して、すべてのgitリポジトリで無視するファイルを設定する
自分はいつものごとく .gitignoreをDropboxにアップロードしておいて
(2020/03/19 追記)
.gitignoreにファイルのPATHを書いたのに、なぜかまだ git statusで出現してくる・・・・
■ 参考 : .gitignoreにファイルを追加したのに無視されない
によると、一度git add とかでリポジトリに登録してしまったものは.gitignoreでは無視できないらしい
そういうときは
--cachedなしの場合はgit repositoryから消え、ファイル自体も消える
(2020/10/28 追加)
.gitignore を使ってgit repository内の特定のファイルをgitに追加しないようにしたい
例えば hoge/foo/aaa.txt というファイルだとすると
頭に/を付けて始めればOK
ツイート
このファイルに書いたファイルは git add する対象にはなりません
つまりディレクトリを一括でgit addしたときしても.DS_Storeはアップロードされません
.gitignoreの書き方
*.o
*.hi
*.chi
*.chs.h
/***/.DS_Store
たぶんこんな感じでおーけー*.hi
*.chi
*.chs.h
/***/.DS_Store
このファイルは、
gitで同期しているディレクトリ自身に.gitignoreを置いてもいいですし、
ホームディレクトリに.gitignoreを一つ置いて、それをglobalな設定にしてしまうのもいいかもしれません
globalな設定にする場合は
git config --global core.excludesfile ~/.gitignore
■ 参考グローバルな.gitignore を設定して、すべてのgitリポジトリで無視するファイルを設定する
自分はいつものごとく .gitignoreをDropboxにアップロードしておいて
ln -s /Users/hoge/Dropbox/setup/.gitignore ~/
としておきます(2020/03/19 追記)
.gitignoreにファイルのPATHを書いたのに、なぜかまだ git statusで出現してくる・・・・
■ 参考 : .gitignoreにファイルを追加したのに無視されない
によると、一度git add とかでリポジトリに登録してしまったものは.gitignoreでは無視できないらしい
そういうときは
git rm --cached path/to/file
または
git rm path/to/file
--cachedありの場合はgit repositoryからは消え、ファイル自体は残るが、.gitignoreで無視されるまたは
git rm path/to/file
--cachedなしの場合はgit repositoryから消え、ファイル自体も消える
(2020/10/28 追加)
.gitignore を使ってgit repository内の特定のファイルをgitに追加しないようにしたい
例えば hoge/foo/aaa.txt というファイルだとすると
/hoge/foo/aaa.txt
頭に/を付けて始めればOK
| HOME |
プロフィール
HN:coffee
職業:物理屋(自称)
趣味:映画鑑賞、登山
出身:大阪府の南の田舎
自己紹介:
import MyProfile
import coffee_pote from TWITTER
import amazonのほしい物リスト from WISH_LIST
print "先月子供が産まれました!"
# 最終更新 2022/10/25
職業:物理屋
趣味:映画鑑賞、登山
出身:大阪府の南の田舎
自己紹介:
import MyProfile
import coffee_pote from TWITTER
import amazonのほしい物リスト from WISH_LIST
print "先月子供が産まれました!"
# 最終更新 2022/10/25
カテゴリー
ブログ内検索
リンク
相互リンク募集中です
(Twitterにてお知らせください)
Demo scripts for gnuplot version 5 (gnuplotのさまざまなデモ画像と作り方がまとめられている、眺めているだけでできるようになった気分になれる)
gnuplotスクリプトの解説 (米澤進吾さんの個人ページ、gnuplotと言えばこのかた)
gnuplot のページ (Takeno Lab、うちのブログがリンクされていたのでリンク返し)
Twitterから映画の評価が分かる & 映画の鑑賞記録が残せる coco (映画の感想をまとめられるサイト、いつもお世話になっています)
Astronomy Picture of the Day Archive (天文や宇宙関連の最新の話題について画像とともにNASAが説明しているページ)
今日のほしぞら (任意の時刻の空で見える星を表示してくれる、国立天文台が管理している)
GNUPLOTとアニメーション (応用の項目の「見せてあげよう!ラピュタの雷を!!」あたりからすごすぎる)
読書メーター (読んだ本をリストできる便利なサイト)
flickr難民の写真置き場 (20XX年、flickrは有料化の炎に包まれた。あらゆるflickr無料ユーザーは絶滅したかに見えた。 しかし、tumblr移住民は死に絶えてはいなかった。)
教授でもできるMac OS X へのLaTeX, X11, gccのインストレーションと環境設定 (阪大の山中卓さんのwebページ、タイトルにセンスが溢れている、内容は超充実してる、特にTeX関連、学振DCとかPDの申請書類作成時にはお世話になっております)
英語論文執筆用の例文検索サービス (とんでもないものを見つけてしまった・・・・ arXivに収録されている 811,761報の 英語論文から,例文を検索するための検索エンジン)
Demo scripts for gnuplot version 5 (gnuplotのさまざまなデモ画像と作り方がまとめられている、眺めているだけでできるようになった気分になれる)
gnuplotスクリプトの解説 (米澤進吾さんの個人ページ、gnuplotと言えばこのかた)
gnuplot のページ (Takeno Lab、うちのブログがリンクされていたのでリンク返し)
Twitterから映画の評価が分かる & 映画の鑑賞記録が残せる coco (映画の感想をまとめられるサイト、いつもお世話になっています)
Astronomy Picture of the Day Archive (天文や宇宙関連の最新の話題について画像とともにNASAが説明しているページ)
今日のほしぞら (任意の時刻の空で見える星を表示してくれる、国立天文台が管理している)
GNUPLOTとアニメーション (応用の項目の「見せてあげよう!ラピュタの雷を!!」あたりからすごすぎる)
読書メーター (読んだ本をリストできる便利なサイト)
flickr難民の写真置き場 (20XX年、flickrは有料化の炎に包まれた。あらゆるflickr無料ユーザーは絶滅したかに見えた。 しかし、tumblr移住民は死に絶えてはいなかった。)
教授でもできるMac OS X へのLaTeX, X11, gccのインストレーションと環境設定 (阪大の山中卓さんのwebページ、タイトルにセンスが溢れている、内容は超充実してる、特にTeX関連、学振DCとかPDの申請書類作成時にはお世話になっております)
英語論文執筆用の例文検索サービス (とんでもないものを見つけてしまった・・・・ arXivに収録されている 811,761報の 英語論文から,例文を検索するための検索エンジン)
最新記事
(11/20)
(03/05)
(02/29)
(02/21)
(02/21)
(02/21)
(02/21)
(01/13)
(01/05)
(01/05)