关于git rebase
目录
1. 上次
2. 概要
3. 內容
4. 用語的摘要
5. 感想
6. 最後
上次的事情
经常使用的git命令
概述
在使用git rebase命令时经常使用的选项
3. 信息
在处理不易理解的提交历史或将两个或更多的提交合并为一个时,可以使用git rebase命令。
在分支上使用git rebase命令,
除非在个人开发等情况下,不要在master或main上使用。
前回のgit記事を一部引用
# リポジトリ初期化(ローカルリポジトリの作成)
$ mkdir rebase_test && cd rebase_test && git init
$ touch README.md && git add .
$ git commit -m init
# GitHub上にリポジトリを作成、リモートにもpushする。
# リモートリポジトリが作成されweb上に展開される(public or private)
$ git remote add origin https://github.com/<あなたのGitHubアカウント名>/sample_app.git
$ git push -u origin master
#ブランチを作成 static-pagesはブランチ名
$ git checkout -b static-pages
#ブランチの切り替わりを確認
$ git branch
#ブランチへ変更点があったものをGitリポジトリへ追加
$ git add -A
$ git commit -m "変更点を記載"
$ git push -u origin static-pages
#コミット内容を追記
$ echo 'あいうえお' >> README.md
$ git add . && git commit -m 'あいうえおと入力'
$ echo 'かきくけこ' >> README.md
$ git add . && git commit -m 'かきくけこを入力'
$ echo 'さしすせそ' >> README.md
$ git add . && git commit -m 'かきくけこを入力'
$ echo '12345' >> README.md
$ git add . && git commit -m 'test'
$ echo 'test' >> README.md
$ git add . && git commit -m 'test'
$ echo 'test' >> README.md
$ git add . && git commit -m 'test'
$ echo 'test' >> README.md
$ git add . && git commit -m 'test'
$ echo 'test' >> README.md
$ git add . && git commit -m '12345を入力'
$ echo '67890' >> README.md
$ git add . && git commit -m '678999を入力'
$ echo 12345 >> README.md
$ echo 67890 >> README.md
$ git add . && git commit -m '数値をやり直し'
# $ git log でログを確認。
# $ git log --reverse --onelineとやると上から下へログを追うことができる。
$ git log --reverse --oneline
c49731e (master) init
34e6137 あいうえおと入力
206942c かきくけこを入力
2d0987d かきくけこを入力
8171c7d test
15d5996 test
206eeaf test
9b81a9e test
ab60d64 12345を入力
6092d9b 678999を入力
ec06e8b (HEAD -> static-pages) 数値をやり直し
输出目标的README.md将处于以下状态。
あいうえお
かきくけこ
さしすせそ
1 2 3 4 5
test
test
test
test
6 7 8 9 0
67890
12345
在编辑提交历史或提交之前通过git branch来确认是在master还是main上进行git rebase -i master的操作。
git branch
master
* static-pages
确认以 brunch 创建,且为 master 的情况,执行 git rebase -i master,将显示以下提交名称。
主要使用 s, squash 和 e, edit。
※如果不小心打开了,请直接用 wq 或 q! 关闭,因为会保存所以应全部使用 d 删除后再用 q! 退出 vi。
git rebase -i master
pick 34e6137 あいうえおと入力
pick 206942c かきくけこを入力
pick 2d0987d かきくけこを入力
pick 8171c7d test
pick 15d5996 test
pick 206eeaf test
pick 9b81a9e test
pick ab60d64 12345を入力
pick 6092d9b 678999を入力
pick ec06e8b 数値をやり直し
pick f248ff9 数字やり直し
# Rebase c49731e..f248ff9 onto c49731e (11 commands)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# . create a merge commit using the original merge commit's
# . message (or the oneline, if no original merge commit was
# . specified). Use -c <commit> to reword the commit message.
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
由于可以在s和e之间选择省略, 指定要修改的提交(commit)
选择从pick 到 s 或 e.
s: 当您希望合并提交时使用,
是指将提交的操作合并到s之上的规范。
e: 用于仅编辑提交名称时使用。
pick 34e6137 あいうえおと入力
pick 206942c かきくけこを入力
e 2d0987d かきくけこを入力
pick 8171c7d test
s 15d5996 test
s 206eeaf test
s 9b81a9e test
pick ab60d64 12345を入力
e 6092d9b 678999を入力
pick ec06e8b 数値をやり直し
pick f248ff9 数字やり直し
出了vi之后,被问到如何编辑名为“输入 かきくけこ”的提交。这里解释了使用git commit –amend来编辑提交名称,然后运行git rebase –continue以应用编辑。
在那个时候,由于追溯到了目标提交的历史记录,
代码也会回到之前的状态,但只要执行git rebase –continue,
就能回到最新的状态,请冷静地进行处理。
※本人因为忘记执行git rebase –continue而感到有些困惑。
git rebase -i master
Stopped at 2d0987d... かきくけこを入力
You can amend the commit now, with
git commit --amend
Once you are satisfied with your changes, run
git rebase --continue
完成後,键入「さしすせそを入力」,然后使用wq命令退出。在执行git rebase –continue以应用更改后,将显示下一编辑信息。
かきくけこを入力 ←「さしすせそを入力」へ変更
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date: Mon Feb 21 09:11:07 2022 +0900
#
# interactive rebase in progress; onto c49731e
# Last commands done (3 commands done):
# pick 206942c かきくけこを入力
# edit 2d0987d かきくけこを入力
# Next commands to do (8 remaining commands):
# pick 8171c7d test
# squash 15d5996 test
# You are currently editing a commit while rebasing branch 'static-pages' on 'c49731e'.
#
# Changes to be committed:
# modified: README.md
#
由于在下一个编辑状态中,这个部分有四个连续的“test”,我们将使用“s,squash”来合并提交。
# This is a combination of 4 commits.
# This is the 1st commit message:
test
# This is the commit message #2:
test
# This is the commit message #3:
test
# This is the commit message #4:
test
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date: Mon Feb 21 09:11:20 2022 +0900
#
# interactive rebase in progress; onto c49731e
# Last commands done (7 commands done):
# squash 206eeaf test
# squash 9b81a9e test
# Next commands to do (4 remaining commands):
# pick ab60d64 12345を入力
# edit 6092d9b 678999を入力
# You are currently rebasing branch 'static-pages' on 'c49731e'.
#
# Changes to be committed:
# modified: README.md
#
将四个名为“test”的提交更改为“test总结”,并使用wq退出。
testをまとめ
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date: Mon Feb 21 09:11:20 2022 +0900
由于在下一个操作中需要求取“amend”,因此将“输入678999”更改为“输入6789”。
PC@name rebase_test % git rebase --continue
[detached HEAD ff04c36] testをまとめ
Date: Mon Feb 21 09:11:20 2022 +0900
1 file changed, 4 insertions(+)
Stopped at 6092d9b... 678999を入力
You can amend the commit now, with
git commit --amend
Once you are satisfied with your changes, run
git rebase --continue
如果使用git commit –amend命令,将显示编辑界面。
678999を入力
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date: Mon Feb 21 09:12:22 2022 +0900
#
# interactive rebase in progress; onto c49731e
# Last commands done (9 commands done):
# pick ab60d64 12345を入力
# edit 6092d9b 678999を入力
# Next commands to do (2 remaining commands):
# pick ec06e8b 数値をやり直し
# pick f248ff9 数字やり直し
# You are currently editing a commit while rebasing branch 'static-pages' on 'c49731e'.
#
# Changes to be committed:
# modified: README.md
#
之後不要忘記使用 “git rebase –continue” 來推進更改。
如果需要重新編輯剩下的數字和修改提交名稱,則所有提交名稱都會被完全修改。
pick ec06e8b 数値をやり直し
pick f248ff9 数字やり直し
用git log –reverse –oneline确认所有编辑已完成。
git log --reverse --oneline
c49731e (master) init
34e6137 あいうえおと入力
206942c かきくけこを入力
21c07ec さしすせそを入力
ff04c36 testをまとめ
fdb8cc3 12345を入力
7b57f94 6789を入力
9f8926f (HEAD -> static-pages) 数字やり直し
如果没有问题的话,进行git push -f和merge操作。
* 如果是个人开发,那就可以了,但如果是团队合作的话,必须进行PR。
mergeとpush
$ git checkout master
$ git merge static-pages
$ git push
如果不需要本地代码库的分支,请删除它。
ブランチを削除
$ git branch -d static-pages
以上是通过git rebase进行的提交合并和提交名称编辑。
简单地说,git rebase可以使用这些方法。
使我们能更清楚地了解提交记录
更改提交消息
将两个或更多的提交合并为一个
编辑已经提交的内容
4. 整理词汇
5. 感受
在不太明白的情况下,我在我的环境和本地仓库中进行了squash操作。虽然在一定程度上确认了操作,但是在使用git rebase –continue执行editd时忘记了处理,让我冷汗直冒。然后使用git reflog回退了提交历史并顺利解决了问题。关于这个reflog,我打算下次总结一下。
6. 最后
我仍然对git rebase的知识掌握得很浅,所以我打算逐步进行编辑和更新。