20200702のGitに関する記事は12件です。

gitの初期設定 gitのeditorをVSCodeをにする。

ターミナルに以下を入力する。
example、example@emailには、それぞれgithabで登録した名前、メールアドレスを入れる。

qiita.rb
$ git config --global user.name "example"
$ git config --global user.email example@email
$ git config --global core.editor 'code --wait'

きちんと登録できたか確認するためには以下のコードを使う。
ruby:qiita.rb
$ git config user.name
$ git config user.email
$ git config core.editor

それぞれ、名前、メールアドレス、code --waitという文字が表示されればきちんと登録されている。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

gitの初期設定 gitのeditorをVSCodeにする。

ターミナルに以下を入力する。
example、example@emailには、それぞれgithabで登録した名前、メールアドレスを入れる。

qiita.rb
$ git config --global user.name "example"
$ git config --global user.email example@email
$ git config --global core.editor 'code --wait'

きちんと登録できたか確認するためには以下のコードを使う。
ruby:qiita.rb
$ git config user.name
$ git config user.email
$ git config core.editor

それぞれ、名前、メールアドレス、code --waitという文字が表示されればきちんと登録されている。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

コミットする際のcommit failed - exit code 1 received with output: git: 'secrets' is not a git command. See 'git --help'.のエラー対処法

Gitにてブランチをコミットしようとした際にエラーが出てコミットできなくなったのでその対処法を記載しておこうと思います。(ツールはGithubDesktopを使用しております。)

このエラーはコミットする際にgit-secretsを利用するファイルはあるけどgit-secretsがないですよ、ということを意味しています。(ぼくの解釈ですが。。。)

このエラーの対処法は主に2つあります。

.git/hooks

1つ目の方法はリポジトリ内の.git/hooksにある「commit-msg, pre-commit, prepare-commit-msg」という実行ファイルを削除する方法です。

$ ls  #カレントディレクトリにあるファイルやディレクトリを表示する
$ ls -l  #ファイルやディレクトリの詳細も同時に表示する
$ ls -a  #隠しファイルも含めファイルやディレクトリを全て表示する
$ ls -la  #隠しファイルを含む全てのファイルやディレクトリの詳細を表示する

.git/hooksは隠しファイルなのでlsコマンドを使用しファイルの場所を確認します。

$ rm test.html  #test.htmlを削除する
$ rm -r test  #testというディレクトリとその中身を削除する
$ rm -f test  #testというファイルを警告なしで削除する
$ rm -rf test  #testというディレクトリとその中身を警告なしで削除する

ディレクトリとファイルの場所を確認したらrmコマンドで「commit-msg, pre-commit, prepare-commit-msg」のファイルを削除します。

git-secretsをインストールする

2つ目の方法はHomebrewにgit-secretsをインストールする方法です。

$ brew install git-secrets

こちらのコマンドを入力すれば完了です。

以上どちらかの方法でコミットできるようになるかと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

リモートブランチに対して、ローカルブランチがいくらか進んでいる状況の解決方法

リモートブランチに対して、ローカルブランチがいくらか進んでいて、その変更内容をリモートにpushしていない状況

$git status
On branch develop
Your branch is ahead of 'origin/develop' by 2 commits.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

現在のdevelopがリモートのdevelopであるorigin/developより2コミット進んでいるという意味

ローカルブランチの更新内容をリモートに反映させたい場合

$ git push origin
より詳細に指定する場合は、
$ git push origin develop:develop

リモートブランチの内容に合わせたい場合

$ git reset -hard origin/develop

コミットをなかったことにしたい場合

$ git reset --hard origin/develop

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

VSCode:VSNotes:メモを異なるワークスペースや端末で共有し、Gitでも管理する。

目的とメリット

  • VSCodeで技術メモを作成し、端末やワークスペースを問わず共有する。
  • VSNotesはワークスペースに関係なくファイルを管理できる。
  • VSNotesの保存先を、クラウドストレージのローカルディレクトリにして端末間でファイルを共有する。
  • Gitのリポジトリをクラウドストレージにおき、バージョン管理も共有する。
  • VSCodeをエディタにすることで様々な編集機能を拡張により便利にできる。

1.任意のクラウドストレージのローカルディレクトリに保存用フォルダを作成

  • Dropbox、OneDrive、GoogleDriveなど同期用のローカルディレクトリにメモを保存するディレクトリを作成。

2.Gitのリポジトリ作成

  • 項番1のディレクトリでリポジトリ作成
cd "項番1のディレクトリパス"
git init

3. VSNotesをVSCodeにインストール。

image.png

4. VSNotesの保存先ディレクトリを設定

  • 「ファイル > 環境設定 > 設定」

image.png

  • 「User > VSNotes」の設定エリアを開く。
  • ワークスペースではなく、ユーザーの設定にして、異なるプロジェクト間でもデータ共有をする。
  • 「Default Note Path」にメモの保存先パスを設定。
  • 保存先パスは、項番1のクラウドストレージのローカルディレクトリパス。

image.png

5. ワークスペース外のリポジトリにコミットするコマンドを設定。

  • VSNotesの設定エリアの「Commit Push Shell Command」に、項番1のディレクトリ内にあるリポジトリにadd&commitするコマンドを設定。

image.png

  • 以下は設定するコマンドの例。
git -C "項番1のディレクトリパス" add -A && git -C "項番1のディレクトリパス" commit -m "{msg}"

6. コマンドパレットからメモを作成

  • コマンドパレットから「VSNotes: Create a New Note」を選択する。

image.png

  • 、コマンドパレットにメモのタイトルをつけて、Enter(作成)。

image.png

7. コマンドパレットからコミット

  • コマンドパレットから「VSNotes: Commit an Push」を選択する。

image.png

  • コミットメッセージを入力して、Enter(コミット)。

image.png

8. GitLensでリポジトリのログを確認。

  • GitLensをインストール。

image.png

  • VSNotesのアイコンをクリックして、メモファイルのリストを表示する。

image.png

  • コミットしたファイルを選択してエディタに表示する。

image.png

  • GitLensは、ワークスペース外にリポジトリがあるファイルも、エディタで開くことで、REPOSITORYペインにリポジトリを表示する。

image.png

以上。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

VSCode:VSNotes:メモをクラウドストレージを使って異なるワークスペースや端末で共有、Gitで管理

0.目的とメリット

(1) 目的

  • VSCodeで技術メモ(Markdown形式)を作成し、端末やワークスペースを問わず共有する。

(2) メリット

  • VSNotesはワークスペースに関係なくファイルを参照できる。つまり、ワークスペース間での共有ができる。
  • VSNotesの保存先を、クラウドストレージのローカルディレクトリにして端末間でファイルを共有する。
  • Gitのリポジトリをクラウドストレージにおき、バージョン管理も共有する。
  • VSCodeがエディタなので、クラウド型のエディタと違い、様々な機能拡張ができる
  • VSNotesは、メモへのタグ付けができるので検索しやすい。
  • メモは、Markdown形式・テキストファイルなので、仮にVSNotesより便利な拡張がでても乗り換えやすい。つまり、拡張やアプリ間での共有もできる。

1.任意のクラウドストレージのローカルディレクトリに保存用フォルダを作成

  • Dropbox、OneDrive、GoogleDriveなど同期用のローカルディレクトリにメモを保存するディレクトリを作成。

2.Gitのリポジトリ作成

  • 項番1のディレクトリでリポジトリ作成
cd "項番1のディレクトリパス"
git init

3. VSNotesをVSCodeにインストール

image.png

4. VSNotesの保存先ディレクトリを設定

  • 「ファイル > 環境設定 > 設定」

image.png

  • 「User > VSNotes」の設定エリアを開く。
  • ワークスペースではなく、ユーザーの設定にして、異なるプロジェクト間でもデータ共有をする。
  • 「Default Note Path」にメモの保存先パスを設定。
  • 保存先パスは、項番1のクラウドストレージのローカルディレクトリパス。

image.png

5. ワークスペース外のリポジトリにコミットするコマンドを設定

  • VSNotesの設定エリアの「Commit Push Shell Command」に、項番1のディレクトリ内にあるリポジトリにadd&commitするコマンドを設定。

image.png

  • 以下は設定するコマンドの例。
git -C "項番1のディレクトリパス" add -A && git -C "項番1のディレクトリパス" commit -m "{msg}"

6. コマンドパレットからメモを作成

  • コマンドパレットから「VSNotes: Create a New Note」を選択する。

image.png

  • 、コマンドパレットにメモのタイトルをつけて、Enter(作成)。

image.png

7. コマンドパレットからコミット

  • コマンドパレットから「VSNotes: Commit an Push」を選択する。

image.png

  • コミットメッセージを入力して、Enter(コミット)。

image.png

  • ちなみに、コミットは、VSNotesのコマンドでなくても、VSCode標準のバージョン管理画面からも行えます。この画面では異なる場所のリポジトリも扱えます。

image.png

8. GitLensでリポジトリのログを確認

  • GitLensをインストール。

image.png

  • VSNotesのアイコンをクリックして、メモファイルのリストを表示する。

image.png

  • コミットしたファイルを選択してエディタに表示する。

image.png

  • GitLensは、ワークスペース外にリポジトリがあるファイルも、エディタで開くことで、REPOSITORYペインにリポジトリを表示する。

image.png

以上。

備考:VSNotesの2020年7月時点での欠点

  • 拡張からファイルを消せない。(直接ディレクトリにいって削除)
  • 拡張のリストはグループ分けでない。(タイトルやタグでグループ分けをする)
  • VSNotesのメモだけの検索機能に不具合がある。また、ディレクトリ内のファイル検索ができない。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Git入門 - 最速でわかるGitの使い方

git.png

Gitは事前に何時間も本やサイトの記事を読むよりも、まずは実際に触れてみるのが一番ですので、本記事では具体的な手順を説明します。

1.Gitとは

Gitは、プログラムソースなどの変更履歴を管理する分散型のバージョン管理システムで、4つの領域に分かれています。

  • ワークツリー
  • ステージング
  • ローカルリポジトリ
  • リモートリポジトリ

リモートリポジトリ以外はローカル環境(自分の端末の中)に属しています。
リモートリポジトリは、インターネット上にあるGitHubサービスのリポジトリで、チームで作り上げたコードを格納する場所です。

この説明だけではいまいちピンとこないと思いますので、実際に使ってみましょう。

2.Gitのインストール

MacOSの場合はデフォルトで入っていますので、何も問題はないかと。
WindowsOSの場合は、Git for Windowsからダウンロードしてインストールを進めてください。
インストールし終えたら、ターミナルで以下のコマンドを実行します。

$ git config --global user.name "ユーザー名"
$ git config --global user.email "メールアドレス"

リモートリポジトリを利用するにはGitHubのアカウントを作り、サインインする必要がありますので、済ませておいてください。

3.リモートリポジトリの作成

サインインしたら左上のNewボタンをクリック。
img1.png
リポジトリ名を入力してCreate repositoryをクリック。(インターネット上に公開する場合はPublic、後悔したくない場合はPrivateを選択してください)
img2.png
下の画面のようになったら準備完了です。
img3.png

4.Gitの操作

好きな場所に練習用のディレクトリを作成します。ターミナルを開き、練習用ディレクトリに移動してもらい、以下のコマンドを入力します。

$ echo "# test" >> README.md

これでREADME.mdファイルが作成されました。
lsやcatで確認すると、

$ ls
README.md
$ cat README.md
# test

のように表示されるはずです。これでワークツリーにファイルを用意することができました。

次はターミナルで

$ git init

を実行します。このコマンドでステージングが準備されたりローカルリポジトリが作成されたりします。

$ git add README.md

上記のコマンドを実行してもターミナル上では特に変化はありませんが、これでREADME.mdがステージングに追加されます。
ちなみに、今いるディレクトリのファイルをまとめて追加したい場合は、

$ git add .

と入力します。

次に、README.mdをステージングからローカルリポジトリに追加します。

$ git commmit -m "initial commit"

""の中には、ファイルにどんな修正を加えたかわかるようにメッセージをつけます。その際、-mを必ずつけてください。

リモートリポジトリにあるURLをコピーします。
img4.png
次に、以下のコマンドを実行します。

$ git remote add origin https://github.com/アカウント名/リモートリポジトリ名.git

これでローカルリポジトリとローカルリポジトリを紐づけることができます。設定を確認したい場合は、

$ git remote -v

を実行してください。

最後にターミナルで、

$ git push origin master

を実行すれば、リモートリポジトリにREADME.mdがアップロードされます。リモートリポジトリを確認すると、
img5.png
無事ファイルが追加されていることがわかります。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

どうせ僕のことだからまた「git cloneできない」と言い出すのだろう

git clone できない

上から順番にやっていきなはれ

git clone する時に秘密鍵指定した?

git clone git@hogehoge:something.git

hogehogeのところは~/.ssh/configHOSTの右に書いてある単語を入れるんや。

$ vim ~/.ssh/config
HOST hogehoge #ここね
    HostName github.com
    IdentityFile ~/.ssh/hogehoge_rsa
    User git

お洒落なエラーが出た?

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

そしたら

$ chmod 600 ~/.ssh/id_rsa

やってみなはれ。

なんかどうにもこうにもうまく行かないのだが

じゃあ、最初っからやりましょか。

$ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/(username)/.ssh/id_rsa):鍵の名前
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

これで鍵作れるよ。id_rsaid_dsaidentityという名前以外は自動で認識してくれない。なのでそれ以外の名前で鍵を作ったら~/.ssh/configに設定を書き込む必要がある。
このファイルがそもそもなかったら自分で作りましょ。

$ cd ~/.ssh 
$ vim config ファイル作る。

configには以下を書けば良き

Host 任意の名前
  HostName github.com
  IdentityFile ~/.ssh/id_git_rsa ここに自分の鍵のファイル名。ここには秘密鍵を置くから!!
  User git

これでOK。
あとはgithubに作った公開鍵を登録しましょう。

$ ssh -T configのHOSTの右に書いた任意の名前

これでつながっているか試してね。

参考

https://qiita.com/nyanchu/items/32d65c4c36315b876d38
https://qiita.com/0084ken/items/2e4e9ae44ec5e01328f1
https://qiita.com/shizuma/items/2b2f873a0034839e47ce
https://qiita.com/jnchito/items/f403921a5935fffd44b6
https://qiita.com/Mitsunori_Tsukada/items/6886f1f28d9485484822

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

gitのメモ

gitconfig設定

git config --global user.name "hoge"
git config --global user.email "hoge@hoge_of_hoge.com"

gitの設定ファイルを開く

## ユーザ単位で設定
vi ~/.gitconfig

## 全ユーザ共通
vi /etc/gitconfig

## 特定のリポジトリだけ
vi .git/config  

gitconfigに追加するもの

[push]
        default = current

[core]
        autocrlf = false
        quotepath = false
[alias]
        s = status
        st = status
        ft = fetch
        df = diff
        cm = commit
        b = branch
        br = branch
        ps = push
        pl = pull
        co = checkout
        gr = log --graph --date=short --decorate=short --pretty=format:'%Cgreen%h %Creset%cd %Cblue%cn %Cred%d %Creset%s'
        l = log --oneline
        ld = log --decorate --oneline
        lg = log --decorate --oneline --graph
        unstage = reset HEAD

コマンドの場合

git config --global rerere.enabled true

作業する (基本編)

リポジトリを取得

git clone ssh_url

現在のブランチを確認

git b

ステータスを確認

git s

ブランチを作成
生やしたいブランチに移動してから実行

git co -b feature/<branch_name>

最新のコミットをremote取得

git pull

リモートブランチを最新に

git ft

最新のmasterをマージ

git merge origin/master --no-ff

コンフリクトしたら
git mergetoolで画面を見ながら修正

# git config --global merge.tool vimdiff // opendiffの場合のみ実行
git mergetool

マージ取りやめ(マージが完全に解決した時)

git reset --hard ORIG_HEAD

マージ取りやめ(コンフリクトして、いろいろ編集して、マージ前に戻りたい)

git reset --hard HEAD

マージ取りやめ(コンフリクトした。マージ前に戻りたい。)

git merge --abort

コミットログを圧縮(一つにする)

git rebase -i まとめたいコミット番号の一つ前のID

ブランチを削除

git b -D feature/xxxxxxxxxxxxxxxxxx

ブランチ名を変更

git b -m feature/before-name feature/after-name

変更をリモートへ反映させる

git push origin feature/work_branch

変更を一時退避

## 退避
git stash

## 退避したstashのリスト
git stash show

## 直前のstashを適用して、削除
git stash pop

## stashを指定して反映(stash自体は削除しない)
git stash apply stash_name

## 全てのstashを削除
git stash clear


## 特定のstashだけ削除
git stash drop stash_name

!!危険!! 追跡されていないファイルをすべて削除

git clean -df

ファイルの中の行を変更した人を探す(俗に犯人探し)

git blame path

直前のコミットに変更内容を追加する

git commit --amend

マージ済み・未マージのブランチ一覧

git branch --merged
git branch --no-merged

リモートで削除されたブランチのローカル参照を削除

git fetch --prune

直前のコミットを結合させたい

git rebase -i HEAD~2

コミットメッセージだけ見たい

git show commit_id

直前のコミットを無かったことにする。

## 変更を無かったことにする
git reset --hard HEAD^

## 変更は残したまま取り消す
git reset --soft HEAD^

特定のコミットに戻す

git revert commit_id

タグ

##  タグ一覧を表示
git tag

## 特定のコミットに対してtagを付与
git tag tag_name

## コミットを指定してtagを付与
git tag -a tag_name -m 'コメント' commit_id

## ローカルで作成したタグをリモートを反映
git push origin tag_name

log|コミット変更履歴確認

## コミットログ履歴を表示
git log

## 1行表示
git log --oneline

## 1週間で変更があったファイル
git log --since="7 days ago" --pretty=format:"" --name-only


## 特定ファイルの履歴を表示
git log -p file_name

## 特定ファイルの10〜15行目の履歴を表示
git log -L 10,15:file_name

diff 差分を表示

## 最新のコミットを比較
git diff HEAD

## 差分の要約を表示
git diff --compact-summary  

## 特定のファイルのみ
git diff -- target_path 

xxxxxxx

xxxxxxx

xxxxxxx

作業する (応用編)

変更のみ確認
diff-filterオプションで変更されたファイルのみDiffを表示するようにする

git diff --diff-filter=M

リネームやコピーを検出

git diff -C

差分のあるファイル一覧を出す
masterと作業ブランチ(work_branch)を比較して、ファイル名だけ出力

git diff --name-only master feature/work_branch

Git管理外のファイルを比較
git grepと同じく、Git管理外のファイルを処理できる--no-indexオプションが用意されています。リポジトリ外のファイルに対しても高機能なgit grepを利用することができます。

git diff --no-index -- path_origin path_target

変更内容を一部だけステージに追加・リセットする。
ファイルの変更内容の一部の行のみをステージに追加したり、反対に一部の行のみステージから除外したいときは-pオプションを付与します。
このオプションを付与すると、対象となる差分ブロック(ハンク)をインタラクティブに選択できるモードが立ち上がるので、指示に従って対象となるハンクを決定していきます。

git add -p
git reset -p

特定のファイルを別ブランチやコミットから取得する
このコマンドを使うと、別ブランチや別コミットから特定ファイルやコードを引っ張ってくることができます。

-pオプションを付与すると、対象となるファイルの一部のみを取得することができます。

git checkout [-p] <tree-ish> -- <path>

!!危険!! 変更内容をすべて戻す

git reset --hard

コミットログにファイルと変更量を表示する
git log -pだとファイルの変更内容が膨大すぎて見づらい、差分の概要だけ見たいといった場合は、かわりに--statオプションを使うことができます。

このオプションは、変更されたファイルのパスと差分量を表示してくれます。

git log --stat

別ブランチから特定のコミットを取り込む

訳あって別ブランチ内の特定のコミットだけ先にリリースしたいというときには、チェリーピック(枝に生えたコミットの 収穫)が使えます。

git cherry-pick commit_id

過去のコミットの編集・統合・削除
リベースコマンドは枝を付け替えるだけでなく、インタラクティブモードを使えば各コミットに対して下記の操作を行えます。

reword: コミットメッセージの編集
edit: コミット内容の編集
squash, fixup: 複数のコミットを融合し1つのコミットにする
exec: シェルコマンドの実行
drop: コミットの削除

git rebase -i upstream(最後のコミットのひとつ前のコミットID)

リモートのブランチを削除

リモートのブランチを消したくなったとき、GitHubやBitBucketのサイトにアクセスしてWeb UIから削除を行うのは少々面倒です。

このコマンドを使えば、ローカルからリモートのブランチを削除することができます。

git push --delete branch_name

操作の取り消し

git reflog
git reset HEAD@{1} # ← ここの参照インデックスはreflogの結果を見て適宜変更する

コミット数を限定してクローンする

長大な歴史を持つリポジトリや、巨大なリポジトリを一部の最新コミットだけ選択的にクローンしたい場合は --depthオプションを利用します。

このオプションで指定した数のコミット(最新順)のみがフェッチされ、クローンを高速化・軽量化できます。

git clone --depth=<n>

過去のコミットの差分に対して検索する

-S単体では文字列検索、--pickaxe-regexをつけると正規表現による検索

git log -S search_word -p

Gitのハッシュ値を人間にわかる形式に変換してくれる
ハッシュ値を渡すとhuman-readableな形式で教えてくれます。

git name-rev hash_id

remote

origin/masterとmasterの違い

origin/master
-> リモートリポジトリ「origin」のブランチ「master」です。
master
-> ローカルリポジトリのブランチ「master」です。

## リモートリポジトリ一覧
git remote -v

## リモートリポジトリ登録
git remote add <リモート名> <リモートリポジトリ>

## リモートリポジトリを変更
git remote set-url <リモート名> <リモートリポジトリ>

## リモートで削除されているが、ローカルで残っているブランチを表示
git remote prune --dry-run <リモート名>

## リモートで削除されているが、ローカルで残っているブランチを削除
git remote prune <リモート名>

xxxxxxxxxxxxxxxxxxx

xxxxxxxxxxxxxxxxxxx

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

git 自分用のメモ

自分専用なのでぼく以外はブラウザバックしておk:point_up:

gitconfig設定

git config --global user.name "hoge"
git config --global user.email "hoge@hoge_of_hoge.com"

gitの設定ファイルを開く

## ユーザ単位で設定
vi ~/.gitconfig

## 全ユーザ共通
vi /etc/gitconfig

## 特定のリポジトリだけ
vi .git/config

gitconfigに追加するもの

[push]
        default = current

[core]
        autocrlf = false
        quotepath = false
[alias]
        s = status
        st = status
        ft = fetch
        df = diff
        cm = commit
        b = branch
        br = branch
        ps = push
        pl = pull
        co = checkout
        gr = log --graph --date=short --decorate=short --pretty=format:'%Cgreen%h %Creset%cd %Cblue%cn %Cred%d %Creset%s'
        l = log --oneline
        ld = log --decorate --oneline
        lg = log --decorate --oneline --graph
        unstage = reset HEAD

コマンドの場合

git config --global rerere.enabled true

作業する (基本編)

リポジトリを取得

git clone ssh_url

現在のブランチを確認

git b

ステータスを確認

git s

ブランチを作成
生やしたいブランチに移動してから実行

git co -b feature/<branch_name>

最新のコミットをremote取得

git pull

リモートブランチを最新に

git ft

最新のmasterをマージ

git merge origin/master --no-ff

コンフリクトしたら
git mergetoolで画面を見ながら修正

# git config --global merge.tool vimdiff // opendiffの場合のみ実行
git mergetool

マージ取りやめ(マージが完全に解決した時)

git reset --hard ORIG_HEAD

マージ取りやめ(コンフリクトして、いろいろ編集して、マージ前に戻りたい)

git reset --hard HEAD

マージ取りやめ(コンフリクトした。マージ前に戻りたい。)

git merge --abort

コミットログを圧縮(一つにする)

git rebase -i まとめたいコミット番号の一つ前のID

ブランチを削除

git b -D feature/xxxxxxxxxxxxxxxxxx

ブランチ名を変更

git b -m feature/before-name feature/after-name

変更をリモートへ反映させる

git push origin feature/work_branch

変更を一時退避

## 退避
git stash

## 退避したstashのリスト
git stash show

## 直前のstashを適用して、削除
git stash pop

## stashを指定して反映(stash自体は削除しない)
git stash apply stash_name

## 全てのstashを削除
git stash clear


## 特定のstashだけ削除
git stash drop stash_name

!!危険!! 追跡されていないファイルをすべて削除

git clean -df

ファイルの中の行を変更した人を探す(俗に犯人探し)

git blame path

直前のコミットに変更内容を追加する

git commit --amend

マージ済み・未マージのブランチ一覧

git branch --merged
git branch --no-merged

リモートで削除されたブランチのローカル参照を削除

git fetch --prune

直前のコミットを結合させたい

git rebase -i HEAD~2

コミットメッセージだけ見たい

git show commit_id

直前のコミットを無かったことにする。

## 変更を無かったことにする
git reset --hard HEAD^

## 変更は残したまま取り消す
git reset --soft HEAD^

特定のコミットに戻す

git revert commit_id

タグ

##  タグ一覧を表示
git tag

## 特定のコミットに対してtagを付与
git tag tag_name

## コミットを指定してtagを付与
git tag -a tag_name -m 'コメント' commit_id

## ローカルで作成したタグをリモートを反映
git push origin tag_name

log|コミット変更履歴確認

## コミットログ履歴を表示
git log

## 1行表示
git log --oneline

## 1週間で変更があったファイル
git log --since="7 days ago" --pretty=format:"" --name-only


## 特定ファイルの履歴を表示
git log -p file_name

## 特定ファイルの10〜15行目の履歴を表示
git log -L 10,15:file_name

diff 差分を表示

## 最新のコミットを比較
git diff HEAD

## 差分の要約を表示
git diff --compact-summary  

## 特定のファイルのみ
git diff -- target_path 

xxxxxxx

xxxxxxx

xxxxxxx

作業する (応用編)

変更のみ確認
diff-filterオプションで変更されたファイルのみDiffを表示するようにする

git diff --diff-filter=M

リネームやコピーを検出

git diff -C

差分のあるファイル一覧を出す
masterと作業ブランチ(work_branch)を比較して、ファイル名だけ出力

git diff --name-only master feature/work_branch

Git管理外のファイルを比較
git grepと同じく、Git管理外のファイルを処理できる--no-indexオプションが用意されています。リポジトリ外のファイルに対しても高機能なgit grepを利用することができます。

git diff --no-index -- path_origin path_target

変更内容を一部だけステージに追加・リセットする。
ファイルの変更内容の一部の行のみをステージに追加したり、反対に一部の行のみステージから除外したいときは-pオプションを付与します。
このオプションを付与すると、対象となる差分ブロック(ハンク)をインタラクティブに選択できるモードが立ち上がるので、指示に従って対象となるハンクを決定していきます。

git add -p
git reset -p

特定のファイルを別ブランチやコミットから取得する
このコマンドを使うと、別ブランチや別コミットから特定ファイルやコードを引っ張ってくることができます。

-pオプションを付与すると、対象となるファイルの一部のみを取得することができます。

git checkout [-p] <tree-ish> -- <path>

!!危険!! 変更内容をすべて戻す

git reset --hard

コミットログにファイルと変更量を表示する
git log -pだとファイルの変更内容が膨大すぎて見づらい、差分の概要だけ見たいといった場合は、かわりに--statオプションを使うことができます。

このオプションは、変更されたファイルのパスと差分量を表示してくれます。

git log --stat

別ブランチから特定のコミットを取り込む

訳あって別ブランチ内の特定のコミットだけ先にリリースしたいというときには、チェリーピック(枝に生えたコミットの 収穫)が使えます。

git cherry-pick commit_id

過去のコミットの編集・統合・削除
リベースコマンドは枝を付け替えるだけでなく、インタラクティブモードを使えば各コミットに対して下記の操作を行えます。

reword: コミットメッセージの編集
edit: コミット内容の編集
squash, fixup: 複数のコミットを融合し1つのコミットにする
exec: シェルコマンドの実行
drop: コミットの削除

git rebase -i upstream(最後のコミットのひとつ前のコミットID)

リモートのブランチを削除

リモートのブランチを消したくなったとき、GitHubやBitBucketのサイトにアクセスしてWeb UIから削除を行うのは少々面倒です。

このコマンドを使えば、ローカルからリモートのブランチを削除することができます。

git push --delete branch_name

操作の取り消し

git reflog
git reset HEAD@{1} # ← ここの参照インデックスはreflogの結果を見て適宜変更する

コミット数を限定してクローンする

長大な歴史を持つリポジトリや、巨大なリポジトリを一部の最新コミットだけ選択的にクローンしたい場合は --depthオプションを利用します。

このオプションで指定した数のコミット(最新順)のみがフェッチされ、クローンを高速化・軽量化できます。

git clone --depth=<n>

過去のコミットの差分に対して検索する

-S単体では文字列検索、--pickaxe-regexをつけると正規表現による検索

git log -S search_word -p

Gitのハッシュ値を人間にわかる形式に変換してくれる
ハッシュ値を渡すとhuman-readableな形式で教えてくれます。

git name-rev hash_id

remote

origin/masterとmasterの違い

origin/master
-> リモートリポジトリ「origin」のブランチ「master」です。
master
-> ローカルリポジトリのブランチ「master」です。

## リモートリポジトリ一覧
git remote -v

## リモートリポジトリ登録
git remote add <リモート名> <リモートリポジトリ>

## リモートリポジトリを変更
git remote set-url <リモート名> <リモートリポジトリ>

## リモートで削除されているが、ローカルで残っているブランチを表示
git remote prune --dry-run <リモート名>

## リモートで削除されているが、ローカルで残っているブランチを削除
git remote prune <リモート名>

xxxxxxxxxxxxxxxxxxx

xxxxxxxxxxxxxxxxxxx

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Git 使い方 git push origin masterまで

Gitでのpushまでの道のり

gitの学習メモ
pushまでの手順。

githubのアカウントは持っている前提。

1、リポジトリの作成

・リモートリポジトリ

・GitHubにログイン
・画面右上+ボタンを押す。
・New repositoryを選択
・リポジトリ名を付ける
・Create Repositoryを押す

・ローカルリポジトリ

・ローカルのソースコードのあるディレクトリに移動
・git init でローカルリポジトリ作成

リモートリポジトリの指定

・git remote add origin https ~ .git
・https ~ .git は GitHubの作ったリポジトリのCodeのページのHTTPSのボタン押したところのやつ

add、commit、push

ソースコードの変更をローカルリポジトリに追加し、リモートリポジトリにローカルリポジトリを反映する。

・git add . ( . は全部のファイルって意味)
・git commit -m "何を変更したかとかのメッセージ"

・git push origin master
これでリモートリポジトリへの反映

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Gitでcheckoutできない現象を解消した

gitでcheckoutしようとすると以下のようなエラーが。。。

$ git checkout develop
error: Your local changes to the following files would be overwritten by checkout:
    xxx/__pycache__/urls.cpython-37.pyc
    xxx/__pycache__/views.cpython-37.pyc
    xxx/__pycache__/urls.cpython-37.pyc
Please commit your changes or stash them before you switch branches.
Aborting

よくわからないままstashを実行。

$ git stash

なんかできてそう。

とりあえずpullだな。

$ git pull
From https://github.com/xxxxx/xxxxx
 * branch            master     -> FETCH_HEAD
Already up to date.

これは。。。

$ git checkout
Switched to branch 'develop'

おおおおおおお!
なんで直ったかわからんができた。

これをやる前にも
.git/index.lockを削除するなどいろいろやったので原因がわからない。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む