Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Fork 元とローカルのレポジトリを同期するエイリアスを考える

More than 1 year has passed since last update.

概要

題名の通り。 Fork 元との同期は忘れがちであり、かつコマンドもよく忘れてしまう。 git fetch upstream -> git rebase upstream/master みたいな形ではあるが、どうも忘れがち。

そこでエイリアスに登録してしまおう、というのが主目的となる。

私の環境

  • OS: MacOS 10.14
  • Git version: 2.21.0
  • Shell: zsh 5.7.1-dev-0

以降については、この環境で検証しているため、特に他の OS 、 Shell の場合は動作保証ができない。(特殊なコマンドを使っていないので、 grep コマンドの動作だけ怪しいが、少しいじれば動くものとは思われる)

生成物

前提条件

git remote add upstream で upstream に Fork 元のリポジトリを登録しておく。

不安なら Git リポジトリのルートで cat .git/config とかで見とくと安心。こんな感じのものがあるはず。( yumechi を自分のユーザー名、 kashikoma を Fork 元、 mirei をリポジトリ名として見てください)

# (前略)
[remote "origin"]
    url = git@github.com:yumechi/mirei.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[remote "upstream"]
    url = git@github.com:kashikoma/mirei.git
    fetch = +refs/heads/*:refs/remotes/upstream/*
# (後略)

また、 upstream の同期したいブランチ名と、ローカルのブランチ名が一致していることを確認する。一致してない場合は checkout する。( master に同期したい場合は git checkout --track origin/master とかで一旦ローカルを master にしておく)

alias

    upstream-pull = "!f () { if git remote | grep upstream -q; then b=$(git rev-parse --abbrev-ref HEAD); git fetch upstream; git rebase upstream/"$b"; unset b; else echo '** error: set upstream !! **'; fi }; f"

https://www.shellcheck.net/ で異常がないか確認しつつ、整形したので多分問題ないはず。

使用してる関数を整形したもの

見づらいので、整形版を張っておく。

    upstream-pull = !"f() { \
    if git remote | grep upstream -q; then \
        b=$(git rev-parse --abbrev-ref HEAD); \
        git fetch upstream; \
        git rebase upstream/"$b"; \
        unset b; \
    else \
        echo '** error: set upstream !! **'; \
    fi \
    }; \
    f"

現在のブランチを upstream に同期するようにしているが、 master ブランチだけでもよかったのでは? という考え方もある。しかし、デフォルトブランチが master でない場合も自分が関わっている範囲でたまにあるため、現在のブランチを同期するようにしている。そのため、同期したいブランチはこのコマンドを打つ前に checkout しておく必要がある。

あとから見た記事

基本的に自分でコマンドを書いていたので、 Qiita 上で探していなかったが、とりあえず良さそうだと思ったのを貼る。

yumechi
えんじにゃー。ぷりぷりかしこま。Pythonしかできない。
https://namonakimichi.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away