clock2020-12-25

gitでまだpushしていないファイルを検出する

重要なやつ 👇

project/scripts/get-root-branch.sh

#!/bin/bash

# もし現在のgitブランチ(ここでfooとします。)がpushされていれば、{remote_name}/fooを返します。
# そうでなければこのブランチのルートとなるブランチ(分岐元)を取得し、それを返します。
#
# このプログラムはまず、リモート名を取得します。
# remoteが複数登録されている場合の適切な処理は未定義です。
# 現在は1番目のリモートを使用するようになっています。

# Returns tags and branches names of the root revision of current.
function root_names () {
  local remote=$1 rev char_not_delim names

  # Parser items
  rev='\w+'
  char_not_delim='[^\)]'
  names="($char_not_delim+)" # 'names' means tags and branches names

  git log --decorate --all --oneline | grep "$remote" | head -1 | sed -r "s/$rev \(($names)\) .*/\1/"
}

# NOTE: Please use nameref feature `local -n result=$1` instead of this global variable if you can use that feature.
names_array=()

# Put given names of glob $2 into $names_array1.
function make_array_of_names() {
  local names=$1 ifs xs i

  # Convert names what are split by ',' to an array.
  ifs=$IFS
  IFS=,
  # shellcheck disable=SC2206
  xs=($names)
  IFS=$ifs

  # Trim heading and trailing spaces
  for (( i=0; i < ${#xs[@]}; i++ )) ; do
    x=$(echo "${xs[$i]}" | sed 's/^ *\| *$//')
    names_array+=("$x")
  done
}

if [[ $(git remote | wc -l) -gt 1 ]] ; then
  echo "Specifying for a remote is not implemented yet. A head remote name will be used instead." > /dev/stderr
fi
remote=$(git remote | head -1)

names=$(root_names "$remote")
make_array_of_names "$names"

for (( i=0; i < ${#names_array[@]}; i++ )) ; do
  name=${names_array[$i]}

  if echo "$name" | grep "^$remote/" > /dev/null ; then
    echo "$name"
    exit 0
  fi
done

exit 1

clock2018-07-31

gitの「Could not execute editor」が出たときは$GIT_EDITORを設定する

$ GIT_EDITOR=nvim git rebase --interact

起承結

$ git rebase --interact
/usr/local/Cellar/git/2.16.1/libexec/git-core/git-rebase--interactive: line 267: /Users/aiya000/poi/.git/rebase-merge/git-rebase-todo: Permission denied
Could not execute editor

って言われてrebase -iできない。 なんかちょっと前もこれで困ってrm -rf git-repo && git clone https://foo.bar/git-repo.gitとかした気がする。

皆さんけっこうgit config core.editor /path/to/your_editorのようにyour_editor…

clock2016-12-09

gitでcommitを1つに統合すべき場合 及び 1つのcommitを分解すべき場合 - プロ生アドベントカレンダー2016 - 9日目

 なんか勢いでブログ記事を書いたところ、丁度今日のプロ生アドベントカレンダーが空いてたので登録する。

clock2016-07-19

今日のgit-tips (簡単で便利なrebaseによるcommit編集)

今日のgit-tips (簡単で便利なrebaseによるcommit編集)

 今日は未pushのいくつかのcommitの内容をgit rebaseで編集する方法を紹介します。

筆者プロフィール

my-latest-logo

aiya000(あいや)

せつラボ 〜圏論の基本〜」 「せつラボ2~雲と天使と関手圏~」 「矢澤にこ先輩といっしょに代数!」を書いています!

強い静的型付けとテストを用いて、バグを防ぐのが好き。Haskell・TypeScript。