ラベル git の投稿を表示しています。 すべての投稿を表示
ラベル git の投稿を表示しています。 すべての投稿を表示

2015年4月19日日曜日

CentOS7.0でgitをソースからインストールする

前提

CentOS7.0を最小構成でインストール済み
gitの最新版はこちらの左カラムで確認

基本的な流れ

  1. 必要なパッケージをインストール
  2. ソースをダウンロード
  3. インストール

$ sudo yum install curl-devel expat-devel gettext-devel \  openssl-devel zlib-devel
$sudo yum install wget

$cd /usr/local/src
$sudo wget https://git-core.googlecode.com/files/git-1.9.0.tar.gz

2014年10月13日月曜日

マージしたコミットを戻す git revert -m 1 と git revert -m 2 の違い

マージコミットのrevertで後ろにつける引数について、ネット上を探してもなかなかまとまっているページがなかったので、まとめます。

参考
http://blog.toshimaru.net/git-revert-mainline/

そもそもマージしたコミットの逆差分を作るには?
オプションで -m を指定します。今回はその後ろにつける1,2の引数についてです

git revert -m 1

マージをした側に戻すように差分をつくる
基本的に使うのはこっちが多い

git revert -m 2

マージされた側に戻すように差分をつくる

実際にやってみる

[uenoryouichi@ueno-MacBook-Air:git_study](master)$ git checkout -b merged
[uenoryouichi@ueno-MacBook-Air:git_study](merged)$ vi test.php
[uenoryouichi@ueno-MacBook-Air:git_study](merged)$ git add .
[uenoryouichi@ueno-MacBook-Air:git_study](merged)$ git commit -m 'このブランチをマージする'

[uenoryouichi@ueno-MacBook-Air:git_study](base)$ git checkout master
[uenoryouichi@ueno-MacBook-Air:git_study](master)$ git checkout -b base
[uenoryouichi@ueno-MacBook-Air:git_study](base)$ vi test.php
[uenoryouichi@ueno-MacBook-Air:git_study](base)$ git add .
[uenoryouichi@ueno-MacBook-Air:git_study](base)$ git commit -m 'このブランチでマージコマンドを打つ'
 
[uenoryouichi@ueno-MacBook-Air:git_study](base)$ git merge merged
Auto-merging test.php
Merge made by the 'recursive' strategy.
 test.php | 4 ++++
 1 file changed, 4 insertions(+)
 
[uenoryouichi@ueno-MacBook-Air:git_study](base)$ glog
*       Ryoichi Ueno    25605e9  (HEAD, base) Merge branch 'merged' into base
|\
| *     Ryoichi Ueno    5e19ce5  (merged) このブランチをマージする    (<= 2に相当)
* |     Ryoichi Ueno    4e1dfd0  このブランチでマージコマンドを打つ   (<= 1に相当)
|/
*       Ryoichi Ueno    f410859  (master) second
*       Ryoichi Ueno    70e35e5  initial commit
[uenoryouichi@ueno-MacBook-Air:git_study](base)$


git revert -m 1でrevertする

[uenoryouichi@ueno-MacBook-Air:git_study](base)$ git revert -m 1 25605e9
[uenoryouichi@ueno-MacBook-Air:git_study](base)$ glog
*       Ryoichi Ueno    fe81bcd  (HEAD, base) Revert "Merge branch 'merged' into base"
*       Ryoichi Ueno    25605e9  Merge branch 'merged' into base
|\
| *     Ryoichi Ueno    5e19ce5  (merged) このブランチをマージする
* |     Ryoichi Ueno    4e1dfd0  このブランチでマージコマンドを打つ
|/
*       Ryoichi Ueno    f410859  (master) second
*       Ryoichi Ueno    70e35e5  initial commit
[uenoryouichi@ueno-MacBook-Air:git_study](base)$ git diff --stat 4e1dfd0       baseブランチ側とは差分がない
[uenoryouichi@ueno-MacBook-Air:git_study](base)$ git diff --stat 5e19ce5      mergedブランチ側と差分がある
 test.php | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

git revert -m 2でrevertする


[uenoryouichi@ueno-MacBook-Air:git_study](base)$ git revert -m 2 25605e9
[uenoryouichi@ueno-MacBook-Air:git_study](base)$ glog
*       Ryoichi Ueno    1b77f6a  (HEAD, base) Revert "Merge branch 'merged' into base"
*       Ryoichi Ueno    25605e9  Merge branch 'merged' into base
|\
| *     Ryoichi Ueno    5e19ce5  (merged) このブランチをマージする
* |     Ryoichi Ueno    4e1dfd0  このブランチでマージコマンドを打つ
|/
*       Ryoichi Ueno    f410859  (master) second
*       Ryoichi Ueno    70e35e5  initial commit
[uenoryouichi@ueno-MacBook-Air:git_study](base)$ git diff --stat 4e1dfd0   baseブランチ側と差分がある
 test.php | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)
[uenoryouichi@ueno-MacBook-Air:git_study](base)$ git diff --stat 5e19ce5    mergedブランチ側とは差分がない

git reset のオプションについて --soft --hard --mixedの違い

rd : 差分は破棄される(indexとworking treeも戻る)
mixed : add前の状態で保持されている(working treeが保持)
soft : add状態で保持されている(indexも保持)

参考

http://d.hatena.ne.jp/murank/20110327/1301224770


用語の補足

HEAD:コミット状態
index:addした状態
working tree:add前の変更分

[uenoryouichi@ueno-MacBook-Air:git_study](master)$ vi test.php
[uenoryouichi@ueno-MacBook-Air:git_study](master)$ git add test.php
[uenoryouichi@ueno-MacBook-Air:git_study](master)$ vi test.php
[uenoryouichi@ueno-MacBook-Air:git_study](master)$ git status
[uenoryouichi@ueno-MacBook-Air:git_study](master)$ glog
*       Ryoichi Ueno    f410859  (HEAD, master) second                ←HEAD
*       Ryoichi Ueno    70e35e5  initial commit
[uenoryouichi@ueno-MacBook-Air:git_study](master)$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)                                   ←index
 
     modified:   test.php
 
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:   test.php                                                                    ←working tree



http://d.hatena.ne.jp/murank/20110327/1301224770 より引用


この状態でそれぞれどのような動きになるか試してみましょう
git reset --soft HEAD
git reset --soft HEAD^
git reset HEAD
git reset HEAD^
git reset --hard HEAD
git reset --hard HEAD^

git resetとgit revertの基本

コードを過去に戻すgit resetとgit revertの違いについて解説します。

ソースを切り戻す時、resetなのか?revertなのか?gitに慣れていないメンバーが多いこともあり、しっかり理解することで安心して切り戻しなどの作業をみんなができるようになると良いなと感じたことから記事にさせていただきました。

はじめに

コードの中にこちらのaliesが使われていますので記載します。

alias glog='git log --graph --all --format="%x09%C(cyan bold)%an%Creset%x09%C(yellow)%h%Creset %C(magenta)%d%Creset %s"'


resetとrevert

利用シーン
過去に戻る。
コミットした差分を修正したい

resetの基本

「指定したコミット位置までHEADの位置を戻す」

revertの基本

「指定したコミットの逆差分を作成する」

よくある切り戻しのシーン

バグが有るコードをリリースしてしまった。orz
リリース前のコードに戻したい!!

どちらが正しいでしょう?
git resetを使って、前回リリースした位置まで戻す!
git revertを使って逆差分で上書きする!


正解はもちろん「git revertする」です。

revertによる切り戻し手順

revert -m 1 <commit hash>でマージコミットの逆差分を作ります(-m と 1 については下方で解説します。)
 ※切り戻し自体はgithubのwebUIによる操作もできるようになりました(下方に記載)

[uenoryouichi@ueno-MacBook-Air:git_study](base)$ git revert -m 1 25605e9
[uenoryouichi@ueno-MacBook-Air:git_study](base)$ glog
*       Ryoichi Ueno    fe81bcd  (HEAD, base) Revert "Merge branch 'merged' into base"
*       Ryoichi Ueno    25605e9  Merge branch 'merged' into base
|\
| *     Ryoichi Ueno    5e19ce5  (merged) このブランチをマージする
* |     Ryoichi Ueno    4e1dfd0  このブランチでマージコマンドを打つ
|/
*       Ryoichi Ueno    f410859  (master) second
*       Ryoichi Ueno    70e35e5  initial commit

reset使っちゃいけない理由

gitの概念として歴史を改変してはいけない。
誰かが誤ったコミットの歴史を間違って保有している可能性がある。→デグレのリスクが生じる。
存在しないコミットから分岐したブランチが作られる可能性がある。→PRを送れないorデグレのリスク

例)
master_resetで7d71e00 をリリースしました。前回リリースは cdf4505
修正するためにresetで戻した場合(ダメなパターンです)
[uenoryouichi@ueno-MacBook-Air:git_study](recover_reset)$ git reset --hard cdf4505
HEAD is now at cdf4505 hogehogehogehoge
[uenoryouichi@ueno-MacBook-Air:git_study](recover_reset)$ glog
*       Ryoichi Ueno    7d71e00  (master_reset) miss!!!!!
*       Ryoichi Ueno    cdf4505  (HEAD, recover_reset) hogehogehogehoge
*       Ryoichi Ueno    b3bd9c4  hogehogehoge
*       Ryoichi Ueno    44515ea  hogehoge
*       Ryoichi Ueno    1b4f700  hoge
[uenoryouichi@ueno-MacBook-Air:git_study](recover_reset)$ git push -f origin master

おさらい

resetの基本
「指定したコミット位置までHEADの位置を戻す」
revertの基本
「指定したコミットの逆差分を作成する」

2014年1月21日火曜日

github導入まで

以前は、Eclipseのプラグインでgitを使っていましたが、vimを使い始めるにあたりgit本来の使い方を復習したのでまとめます。

参考にしたのは
Git-使いはじめる-Gitのインストール
開発ツール徹底攻略(技術評論社)
最速で Git を Mac にインストールして基本的なコマンドを使う方法

手順
インストール

まずはここからDownload the installers hereというリンクをクリック!
GUIインストーラーをダウンロード
チョメチョメと進んでいくとインストール完了

初期設定
gitさんにこんにちは。お名前とメールアドレス登録教えてあげます。
ホームディレクトリ( ~/* )で有効にしたいので --global オプションを使っています。

$ git config --global user.name "********" 名前
$ git config --global user.email "********" メールアドレス
cat ~/.gitconfig 
[user]
 name = ********
 email = ********@******

git管理の対象のディレクトリに移動してリポジトリ作る

$ cd ~/aaa/bb/ccc/   リポジトリを作るディレクトリへ
$ gut init
これで.gitという隠しディレクトリが生成されます
コミットする

$ git add 
$ git commit -m "コメントを書いてください" 

変更確認する

$ git diff

差分が見れるようになるので楽しいですね。
+が追加されたもの(正確には変更後?)
ーが削除されたもの(正確には変更前?)

簡単ですがこんなところです。

他にgit logコマンドとか.gitignoreファイルとかは使ってますが、
まだまだブランチ-マージは使えてないです。

次回はここからGitHubを設定したのでそこちょっと触れていきます