关于学习Git(GitHub)的产出
分支是什么?
分支是记录历史流程并进行分岐记录的工具。分支的分岐不受其他分支的影响,因此可以同时进行多个变更。
可以通过合并(merge)分支来将它们整合成一个新的分支。
分支运营的流程
-
- メインブランチから作業専用のブランチを作成する(checkout -b “ブランチ名”で作成可能)
- 作業が終わり次第自分のブランチをメインのブランチに取り込む(push merge)また、作業単位で履歴を残す(commit)ことで、問題が発生した場合に原因となる変更箇所の調査や対策を行うことができる。
主分支
当在代码库中执行了第一个提交时,Git会创建一个名为“master”(目前为“main”)的分支。
从这里开始创建分支,进行开发工作。
整合分支
作为分岔点的主分支,将在后面讨论的主题分支。因此需要维持稳定状态。
在这个分支上进行CI工具的测试(对我们来说,ST对应什么?)
主题分支
主题分支是用于执行与功能添加或错误修复等任务相关的工作的分支。
每个课题都会创建一个专题分支。
在集成分支中创建分支,并在工作完成后将其合并到集成分支中。
分支切换
要从主分支切换到话题分支,请使用’checkout’命令。
git checkout ブランチ名 <!--既存のブランチに切り替える-->
或者,
git checkout -b ブランチ名 <!-- ブランチの作成と切り替えを同時に行う -->
如果只是新建一个分支,您可以这样做。
git branch ブランチ名 <!-- ブランチは作成されるが、checkoutはされない -->
假设
标题
HEAD指的是当前使用的分支的开头名称。默认情况下,它表示主分支(master branch)的开头。
存储
如果在没有提交的情况下,内容或新添加的文件在索引或工作目录中仍然存在,然后切换到另一个分支,这些更改将反映在所切换的分支中。
然而,如果在移动到其他分支之前对同一文件进行了编辑,将无法进行checkout操作。
在这种情况下,可以选择提交更改或使用stash命令,将更改内容暂时保存并进行checkout操作。
git stash <!-- コマンド -->
合并分支
在分支合并中,有两种选项:合并(merge)和变基(rebase)。
合并
如果要将一个分支合并到主分支上,并且主分支的状态从以前开始没有被改变过,那么进行合并就很容易。这种情况下的合并被称为“快进合并”(fast-forward merge)。
如果在合并时,主分支的状态与检出时不同,则会创建一个合并提交,其中包含主分支和话题分支的所有提交,并将主分支的头指针移动到该提交。
通过指定”non fast-forward”选项,即使可以进行快进合并,也可以创建具有合并提交的合并。
重定基线
合并分支更改记录的方法。
在合并操作中,主分支不会包含主题分支的更改历史(提交记录),而是保留了合并主题分支的历史记录。而在变基操作中,当将主题分支合并时,会将主题分支的所有提交历史整合到当前HEAD的后面。
在这个时候,master的头部和rebase之前的状态没有变化,所以在rebase之后,必须合并并将主题分支的更改纳入。
在提交之前将已更改的文件注册到索引中(处于准备就绪状态)。
git add ファイル名
删除分支
git branch -d ブランチ名
检查当前存在的分支
git branch
获取远程仓库的变更历史记录
git pull ブランチ名
查看遠程儲存庫的內容
如果您想查看远程仓库的更改内容,可以在合并之前仅确认内容。
git fetch origin master
可以尝试以下方式。可通过checkout来确认并查看名为’FETCH_HEAD’的内容。
如果你想直接将内容并入,可以使用git merge来合并更改。
‘git pull’是一個可以一次完成這一系列操作的命令。
将本地存储库推送到远程存储库
git push ブランチ名
解决冲突
如果在不同的主题分支中对同一个文件进行编辑
<<<<<<< HEAD
puts 'hello'
=======
puts 'おはようございます'
>>>>>>> # mergeしたいブランチ
在想要合并的分支和另一个分支上对相同文件进行了编辑,导致每个更改发生了冲突。
要解决这个问题(本次将包含两种变更),需要
puts 'hello'
puts 'おはようございます'
只要保留需要保留的更改部分即可。然后,为了记录解决冲突,重新提交解决后的文件以进行合并。这种合并称为非快进式合并。
解决rebase时的冲突问题。
在尝试使用rebase将修改文件的分支合并到主分支时,也会发生冲突。
<<<<<<< HEAD # 同じようにconflictが発生するので同じように修正する
puts 'hello'
=======
puts 'おはようございます'
>>>>>>> # mergeしたいブランチ
修正之后。
puts 'hello'
puts 'おはようございます'
在rebase的情况下,修正冲突后,要使用rebase命令的–continue选项来执行,而不是使用commit命令。
如果您想要取消rebase操作本身,可以使用–abort选项进行撤销。
在执行完”git rebase –continue”之后,切换到主分支(master)并使用”git merge <分支名>”命令,将更改合并到主分支(master)中。
添加标签以便易于查阅提交
标签是为了便于以后查阅commit而添加的。
有轻量级标签和带注释的标签。
轻量标签
- 名前だけをつけられる
有注解的标签
-
- 名前をつけられる
-
- コメントをつけられる
- 署名をつけられる
在发布正式版本时,可以使用带注释的标签来添加注释和署名。轻量标签用于在本地临时使用,比如一次性使用。
添加轻量级标签
在当前的HEAD指向的commit上打上标签。
git tag test <!-- testというタグが今いるリポジトリの最新のcommitにつけられる -->
git tag <!-- つけられているタグの一覧を取得できる -->
git log --decorate <!-- タグ情報を含めて履歴を確認することができる -->
添加带注释的标签
git tag -a タグ名
如果这样的话,一个可以输入评论的编辑器将会启动。
git tag -am ’これはテストタグです’ test
如果这样的话,可以给’test’标签添加注释(评论)”这是一个测试”。
删除标签
git tag -d タグ名
假设。
修改最近的提交消息
git commit --amend -m "このコメントに書き換える"
取消过去的提交
无法自行删除其他人已经合并的提交。(因为如果我在我的本地删除,其他人的本地仍然保留,会导致历史记录出现问题。)
如果这种情况发生,则需要创建一个撤销过去提交内容的提交(commit)。
*类似于Rails的迁移文件的思维方式。如果删除了以前创建的迁移文件,在运行rails db:migrate命令时将无法保持一致性,导致无法继续进行迁移。因此,如果想要修改之前迁移文件的内容,需要创建一个撤销此内容的迁移文件并执行rails db:migrate命令。
git revert <commit ID> <!-- このIDはgit logコマンドを打つと表示されるID -->
当执行此命令时,会启动一个用于更改提交消息的编辑器。
删除commit
当需要删除已经提交的内容时,即刻执行删除操作
git reset
执行命令。
可以通过选择选项来改变reset操作的影响范围。
# 直前のコミットをなかったことにする
git reset --soft HEAD^
# 直前のコミットを取り消し
git reset --hard HEAD^
# コミット後の変更を全部消したい
git reset --hard HEAD
# addを取り消したい
git reset --mixed HEAD
# git resetをなかったことにする
git reset --hard ORIG_HEAD
去掉”commit”
可以从另一个分支复制指定的commit,并将其合并到当前分支中。
git cherry-pick <commit ID> <!-- git log で事前に取り込みたいcommitのIDを確認しておく -->
逆序 -i 选项
git rebase -i HEAD~~ # テキストエディタが起動しHEADから二つ前のcommitが表示される
pick <commit ID> commitメッセージ # HEADから二つ前のcommit
pick <commit ID> commitメッセージ # HEADから一つ前のcommit この行のpickをsquashに変更し保存する
然后,在整理后的提交中,将会显示一个用于编辑消息的编辑器,输入消息并保存。
南瓜选项
使用特殊的合并方式。当指定此选项进行合并时,会添加一个整合了该分支的所有提交的提交。
在主分支上
git merge --squash 取り込みたいブランチ名
假设。