20190526のGitに関する記事は4件です。

git

git基本設定
初期のディレクトり

Hello
 - hello.rb

$git init 実行
※gitは隠しファイル(ls -aで見れる)

Hello
 - hello.rb
 - .git
   - HEAD
   - config(設定ファイル)
   - などなど


ディレクトリ
$ ls -C .git
COMMIT_EDITMSG  ORIG_HEAD   hooks       logs        rr-cache
HEAD        config      index       objects
MERGE_RR    description info        refs


- objects
変更した履歴?

- HEAD
最新の状態
基本コマンド
git add
git status
git commit -m "コミットメッセージ"
git checkout
git reset
git log
git log --pretty=oneline(commit の名前だけ見れる)
git log --pretty=oneline --max-count=2
git log --pretty=oneline --since='5 minutes ago'
git log --pretty=oneline --until='5 minutes ago'(編集時間でソート)
git log --pretty=oneline --author=<your name>(編集者でソート)
git log --pretty=oneline --all
gitconfigの設定
[alias]
  co = checkout
  ci = commit
  st = status
  br = branch
  hist = log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short
  type = cat-file -t
  dump = cat-file -p
戻る
git checkout <hash>
git checkot master(これで戻れる。。。。) 

hash値にgcした時のブランチを見ると。。。。

$ git branch
* (HEAD detached at ef8ce92)
  master
addの取り消し
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   hello.rb(緑)

addから外す

$ git reset HEAD hello.rb



$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   hello.rb(赤)
revert
commit 2b8bec385230a923f6d1866a61b5fa5919967969 (HEAD -> master)
Author: Awtanabe <panser098@gmail.com>
Date:   Sun May 26 22:24:31 2019 +0900

    Revert "for revert"

    This reverts commit df9de155eedb95f08f083578d874d97a9918e6be.

commit df9de155eedb95f08f083578d874d97a9918e6be
Author: Awtanabe <panser098@gmail.com>
Date:   Sun May 26 22:24:16 2019 +0900

    for revert

※revertした履歴も残る!!
 共同開発して勝手に消されたら困るもんね。
コミットの編集
git commit --amend -m "Add an author/email comment"
ファイルの場所を変更
git mv hello.rb lib

git つけるんだ

git をつけないと...


$ git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    deleted:    hello.rb

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    lib/


hello.rbがdeleteされて
libのデレクトダケができる

ちゃんとやると

$ git mv hello.rb lib/

watanabeakifumi-no-MacBook-Air:hello watanabeakifumi$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    renamed:    hello.rb -> lib/hello.rb

Raketaskの実行
Rakefile(ファイル名)
#!/usr/bin/ruby -wKU

task :default => :run

task :run do
  require './lib/hello'
end

$ rake 
→ helloworld

rake で実行すると、defaultのtaskが実行されるのか

ブランチ作成
git branch <ブランチ名>
rebaseとコンプリくと
$ git rebase <含みたいブランチ>


1 コンフリクト発生
2 >>>で検索する
3 解消する
4 git add -A
5 git rebase --continue 修正終わったら
※一つづつ解決する

コンフリクトの解消
コンフリクト発生
$ git merge master
Auto-merging lib/hello.rb
CONFLICT (content): Merge conflict in lib/hello.rb
Automatic merge failed; fix conflicts and then commit the result.

リモートブランチ
$ git remote -v
$ git branch -a(リモートブランチ一覧)
$ git remote add shared ../hello.git(リモートに追加)
Todo
fetch 
pull 
bare
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

git rebase -i のサンプル実行メモ(reword, edit, squash, drop)

はじめに

  • この前、チーム内でgitの解説的な時間があり、その時に git rebase -i の使い方をライブプログラミング的に聞いた。今までよく分からなかったので、調べるのが面倒であまり使っていなかったのだが、この機会に色々触ってみたので、サンプルコマンドの結果をまとめたメモ
    • 解説は無し
    • ★が事後コメント
    • 利用の機会がありそうな reword, edit, squash, drop が対象

初期状態(準備)

  • テキストファイルを適当に6個([a..f].txt)作成する
  • それぞれのファイルの作成に対してcommitするがb,cのみコミットをまとめておく
% tig
16cc549 2019-05-26 15:39 kuredev          o [master] add f.txt
3e55df3 2019-05-26 15:39 kuredev          o add e.txt
16734b1 2019-05-26 15:38 kuredev          o add d.txt
00f95df 2019-05-26 15:38 kuredev          o add b.txt and c.txt
ae36142 2019-05-26 15:37 kuredev          o add a.txt

reword

add a.txt のコミットメッセージを修正する

% git rebase -i HEAD~5
  1 reword ae36142 add a.txt ★rewordに修正
  2 pick 00f95df add b.txt and c.txt
  3 pick 16734b1 add d.txt
  4 pick 3e55df3 add e.txt
  5 pick 16cc549 add f.txt

:wq ★保存

  1 add a.txt by git rebase -i ★修正
  2
  3 # Please enter the commit message for your changes. Lines starting
...(省略)

:wq ★保存

%tig
f749d8b 2019-05-26 15:39 kuredev          o [master] add f.txt
bc1b2da 2019-05-26 15:39 kuredev          o add e.txt
cb4bf08 2019-05-26 15:38 kuredev          o add d.txt
1b3df3a 2019-05-26 15:38 kuredev          o add b.txt and c.txt
d7cf3d2 2019-05-26 15:37 kuredev          o add a.txt by git rebase -i ★

修正された。
あと、それ以後のコミットIDがすべて更新された。

edit

コミットを分割してみる

事前に add b.txt and c.txt が2つのファイルをまとめたコミットとしてあったので、これを2つのコミットに分けてみる

初期状態

%tig
f749d8b 2019-05-26 15:39 kuredev          o [master] add f.txt
bc1b2da 2019-05-26 15:39 kuredev          o add e.txt
cb4bf08 2019-05-26 15:38 kuredev          o add d.txt
1b3df3a 2019-05-26 15:38 kuredev          o add b.txt and c.txt ★これを分割してみる
d7cf3d2 2019-05-26 15:37 kuredev          o add a.txt by git rebase -i

rebase -i

% git rebase -i HEAD~5
  1 pick d7cf3d2 add a.txt by git rebase -i
  2 edit 1b3df3a add b.txt and c.txt ★
  3 pick cb4bf08 add d.txt
  4 pick bc1b2da add e.txt
  5 pick f749d8b add f.txt

:wq ★保存

★この時点でログを見るとadd b.txt and c.txtのコミットまでで止まっている(という表現が正しいか不明)
% tig
1b3df3a 2019-05-26 15:38 kuredev          o [HEAD] add b.txt and c.txt
d7cf3d2 2019-05-26 15:37 kuredev          o add a.txt by git rebase -i
★ファイルの実体もある
kure@ubuntu ~/test-repo % ls
a.txt  b.txt  c.txt

コミット再作成

★コミットを1つ取り消す
% git reset HEAD^
% tig
d7cf3d2 2019-05-26 15:37 kuredev          o [HEAD] add a.txt by git rebase -i
★実体(ワーキングツリー)はある
kure@ubuntu ~/test-repo % ls
a.txt  b.txt  c.txt
★add/commitし直す
kure@ubuntu ~/test-repo % git add b.txt      
kure@ubuntu ~/test-repo % git commit -m "b.txt"    
[detached HEAD a59668d] b.txt
1 file changed, 2 insertions(+)
create mode 100644 b.txt
kure@ubuntu ~/test-repo % git add c.txt        
kure@ubuntu ~/test-repo % git commit -m "c.txt"
[detached HEAD a3bc22b] c.txt
1 file changed, 2 insertions(+)
create mode 100644 c.txt
★ rebase
kure@ubuntu ~/test-repo % git rebase --continue

確認

★ 確認:コミットが別れた!
kure@ubuntu ~/test-repo % tig
7123fe0 2019-05-26 15:39 kuredev          o [master] add f.txt
0cbbe5b 2019-05-26 15:39 kuredev          o add e.txt
1ad7908 2019-05-26 15:38 kuredev          o add d.txt
a3bc22b 2019-05-26 16:05 kuredev          o c.txt
a59668d 2019-05-26 16:05 kuredev          o b.txt
d7cf3d2 2019-05-26 15:37 kuredev          o add a.txt by git rebase -i

コミットの内容を書き換える

初期状態

kure@ubuntu ~/test-repo % tig
166a2f9 2019-05-26 15:39 kuredev          o [master] add f.txt
cbe6fa0 2019-05-26 15:39 kuredev          o add e.txt
29bed98 2019-05-26 15:38 kuredev          o add d.txt
a3bc22b 2019-05-26 16:05 kuredev          o c.txt
a59668d 2019-05-26 16:05 kuredev          o b.txt ★このコミットの内容を書き換える
★Typoしてる
kure@ubuntu ~/test-repo % cat b.txt
crate

git rebase -i

kure@ubuntu ~/test-repo % git rebase -i d7cf3d2~1
  1 pick d7cf3d2 add a.txt by git rebase -i
  2 edit a59668d b.txt ★
  3 pick a3bc22b c.txt
  4 pick 29bed98 add d.txt
  5 pick cbe6fa0 add e.txt
  6 pick 166a2f9 add f.txt
kure@ubuntu ~/test-repo % vim b.txt
kure@ubuntu ~/test-repo % cat b.txt
create
kure@ubuntu ~/test-repo %
★add/commitし直す
kure@ubuntu ~/test-repo % git add b.txt          
kure@ubuntu ~/test-repo % git commit --amend
[detached HEAD 6c86aaf] b.txt
Date: Sun May 26 16:05:05 2019 +0900
1 file changed, 2 insertions(+)
create mode 100644 b.txt
★rebase
kure@ubuntu ~/test-repo % git rebase --continue  

確認

%tig
7f9a0bd 2019-05-26 15:39 kuredev          o [master] add f.txt
1a2c3f5 2019-05-26 15:39 kuredev          o add e.txt
7251eeb 2019-05-26 15:38 kuredev          o add d.txt
da4ddb6 2019-05-26 16:05 kuredev          o c.txt
6c86aaf 2019-05-26 16:05 kuredev          o b.txt

kure@ubuntu ~/test-repo % git show 6c86aaf  
    b.txt

diff --git a/b.txt b/b.txt
new file mode 100644
index 0000000..0cbdfe6
--- /dev/null
+++ b/b.txt
@@ -0,0 +1,2 @@
+create ★
+
★内容書き換わった!

squash

  • 指定したコミットを一つ前のコミットにまとめる
  • b.txt と c.txt の作成のコミットを一つのコミットとしてみる
  • c.txt に対して squashする

初期状態

★初期状態
kure@ubuntu ~/test-repo % tig
7f9a0bd 2019-05-26 15:39 kuredev          o [master] add f.txt
1a2c3f5 2019-05-26 15:39 kuredev          o add e.txt
7251eeb 2019-05-26 15:38 kuredev          o add d.txt
da4ddb6 2019-05-26 16:05 kuredev          o c.txt
6c86aaf 2019-05-26 16:05 kuredev          o b.txt

rebase -i

★ rebase -i
kure@ubuntu ~/test-repo % git rebase -i HEAD~5
  1 pick d7cf3d2 add a.txt by git rebase -i
  2 pick 6c86aaf b.txt
  3 s da4ddb6 c.txt ★ squash
  4 pick 7251eeb add d.txt
  5 pick 1a2c3f5 add e.txt
  6 pick 7f9a0bd add f.txt

  2 # This is the 1st commit message:
  3
  4 b.txt
  5
  6 # This is the commit message #2:
  7
  8 # c.txt ★コミットメッセージの編集:今回はコメントアウトする

確認

% tig
64d01fa 2019-05-26 15:39 kuredev          o [master] add f.txt
e398f2e 2019-05-26 15:39 kuredev          o add e.txt
b267e94 2019-05-26 15:38 kuredev          o add d.txt
3cc9b19 2019-05-26 16:05 kuredev          o b.txt
d7cf3d2 2019-05-26 15:37 kuredev          o add a.txt by git rebase -i
★c.txt が消えた。

★一つのコミットにまとめられてる。
kure@ubuntu ~/test-repo % git show 3cc9b19    
commit 3cc9b190ad7a390e4473b7e2360dd8afcc4d3640
Author: kuredev <rapuntuleru2@gmail.com>
Date:   Sun May 26 16:05:05 2019 +0900


    b.txt


diff --git a/b.txt b/b.txt
new file mode 100644
index 0000000..0cbdfe6
--- /dev/null
+++ b/b.txt
@@ -0,0 +1,2 @@
+create
+
diff --git a/c.txt b/c.txt
new file mode 100644
index 0000000..0cbdfe6
--- /dev/null
+++ b/c.txt
@@ -0,0 +1,2 @@
+create
+

drop

初期状態

★初期状態 add e.txt のコミットを消す
kure@ubuntu ~/test-repo % tig
64d01fa 2019-05-26 15:39 kuredev          o [master] add f.txt
e398f2e 2019-05-26 15:39 kuredev          o add e.txt
b267e94 2019-05-26 15:38 kuredev          o add d.txt
3cc9b19 2019-05-26 16:05 kuredev          o b.txt

rebase -i

kure@ubuntu ~/test-repo % git rebase -i HEAD~4
Successfully rebased and updated refs/heads/master.

  1 pick 3cc9b19 b.txt
  2 pick b267e94 add d.txt
  3 d e398f2e add e.txt ★
  4 pick 64d01fa add f.txt

確認

★コミットが消えた。
kure@ubuntu ~/test-repo % tig
5059dfc 2019-05-26 15:39 kuredev          o [master] add f.txt
b267e94 2019-05-26 15:38 kuredev          o add d.txt
3cc9b19 2019-05-26 16:05 kuredev          o b.txt
d7cf3d2 2019-05-26 15:37 kuredev          o add a.txt by git rebase -i

★ eもなくなった。
kure@ubuntu ~/test-repo % ls
a.txt  b.txt  c.txt  d.txt  f.txt

参考

gitのコミットの歴史を改変する(git rebase) 1 / 2 · けんごのお屋敷 http://tkengo.github.io/blog/2013/05/16/git-rebase-reference/

[git]特定のコミットの内容を修正する - dackdive's blog https://dackdive.hateblo.jp/entry/2014/09/21/122200

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

【Xcode10】不要なリモートファイルを作らない.gitignore作成タイミング

Xcodeではプロジェクトを作るときに、一緒にGitリポジトリを作ることができます。プロジェクトフォルダの場所を指定する以下の画面で、「Create Git repository on my Mac」にチェックを入れれば、Gitローカルリポジトリを作ってくれます。
スクリーンショット 2019-05-25 23.37.42.png

不要なファイルができてしまうケース

この状態でXcodeからリモートリポジトリを追加すると、*.xcodeproj等の不要なフォルダやファイルができてしまいます。
スクリーンショット 2019-05-25 23.42.54.png
*.xcodeprojフォルダの中にはxcuserdataも含まれていますね。
スクリーンショット 2019-05-25 23.43.03.png

不要なファイルができる原因

最初にGitローカルリポジトリが作られた時点で、不要なファイルもバージョン管理下に置かれるのが原因です。そのままリモートリポジトリを作ると、当然これらのファイルもPushされてしまいます。

不要なファイルの追跡をやめるには、.gitignoreファイルを作成すればOKです。また、バージョン管理下から外すには、git rm --cashed 等のコマンドを使えば可能です。

しかし、できれば最初から、不要なファイルはバージョン管理下に置かないようにしたいものです。

不要なリモートファイルを作らない手順

プロジェクトフォルダを指定する際、「Create Git repository on my Mac」にはチェックを入れないようにします。
スクリーンショット 2019-05-25 23.38.04.png
バージョン管理を始める前に、.gitignoreファイルを作ります。以下の例ではgiboを使っていますが、既存のファイルをコピーしてもいいですし、エディタで自作しても構いません。
スクリーンショット 2019-05-25 23.41.18.png
Xcodeのメニューから、[Souce Control]-[Create Git Repositories...]ローカルリポジトリを作ります。
スクリーンショット 2019-05-25 23.50.37.png
Createをクリックすると、ローカルリポジトリが作られます。この時点でバージョン管理を始めますが、すでに.gitignoreファイルがあるため、不要ファイルがバージョン管理下に置かれることはありません。
スクリーンショット 2019-05-25 23.51.04.png
左側のナビゲーターペインSource Control Navigatorに切り替えて、Remotesの右クリックメニューから[Create "プロジェクト名" Remote...]リモートリポジトリを作ります。
スクリーンショット 2019-05-25 23.51.34.png
リモートリポジトリの名前を指定し、Createで作成します。
スクリーンショット 2019-05-25 23.52.00.png
不要なファイルがないリモートリポジトリができました。
スクリーンショット 2019-05-25 23.52.26.png
このように、Gitを使う前に.gitignoreファイルを作っておくことで、不要なファイルをバージョン管理下に置かず、リモートリポジトリにもPushさせないようにすることができます。

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

Git 基本的なコマンド

Gitについて、事前に知っておくべきこと

  • 現在のプロジェクトファイルがある「Working Directory」。
  • Commitした、ソースコードを保存する「Repository」。
  • 「Working Directory」と「Repository」間のバッファarea「Staging Area」。
  • 「HEAD」は現在のブランチの最新のコミットを意味する。
  • 既定のリモートリポジトリは、「origin」。

基本的なコマンド

git --version   //現在のgitのバージョンを確認
git clone {url} //リモートリポジトリからクローンする
git status      //Localの変更を確認

Log

git log            //Commit Logを参照
git log --oneline  //Commit LogのCommit IDを表示
git log --decorate //Commit LogのHEADを明示
git log --graph    //Commit Logを縦グラフで表示

Checkout

git checkout [branch]  //ブランチを変更
git checkout -b [branch] //ブランチを作成&変更
git checkout -b [branch_B] [branch_A] //branch_Aから、branch_Bを作成&変更

Add

git add //ファイルをadd
git add [file]//ファイルをadd

git commit -m “[comment]” //Commit messageを同時に指定

Commit

git commit //ファイルをCommit
git commit -m “[comment]” //Commit messageを同時に指定

Push

git push  //Repositoryで変更を反映
git push [repository] [branch] //リモートリポジトリに変更を反映

Fetch

git fetch //Remote Repositoryの最新データを取ってくる

Pull

git pull //Remote Repositoryの変更インポートしてリモートブランチを更新

Reset

git reset --soft HEAD^      //commitをcancelして、ファイルは「staged status」で、Working Directoryに保存
$ git reset --mixed HEAD^   //commitをcancelして、ファイルは「unstaged status」で、Working Directoryに保存
$ git reset HEAD^           //commitをcancelして、ファイルは「unstaged status」で、Working Directoryに保存
$ git reset HEAD~2         //最後の二つのcommitをcancel
$ git reset --hard HEAD^    //commitをcancelして、ファイルは「unstaged status」で、Working Directoryから削除

Revert

git revert [commit id]      //commit idのcommitをcancel

Rebase

git rebase [branch]     //branchにrebaseする
git rebase --abort      //直前のgit rebaseの編集を中止
git rebase --continue   //rebaseを続ける

Merge

$ git merge [branch]    //現在のbranchを指定したbranchとMerge
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む