Git/Github的备忘录
首先
参加了第一次黑客马拉松时,觉得使用起来太方便了,所以为了自己整理起来。
因为完全不熟练,所以会不断追加。
如果有错误,请毫不客气地告诉我。
那么我就赶快写下去。
目录
1. 首先
2. 目录
3. 概要
4. 引言
5. 基本使用方法
6. 不同的概念
7. 术语
8. 其他各种命令
9. 结束
概要 – General summary or overview
Git是一种分布式版本控制系统(Version Control System)。
它的强大之处在于可以在不同的地方进行开发。
可以通过远程仓库来共享各自的进度。
还可以获取以前的版本。
Github是一个提供远程仓库的托管服务(提供服务器租用服务)。
还有一个叫GitLab的类似服务。
引入
暂时先介绍一下如何设置。
虽然有很多可以使用git的工具,但今次我们会用git和Visual Studio Code(以下简称VScode)。
虽然有GUI工具SourceTree,但VScode也可以进行GUI操作,所以也许用不着SourceTree。
基本上是关于Windows的讲解。
下载、安装、登录
VScode可以在以下链接下载:https://code.visualstudio.com/download
Git可以在以下链接下载:https://git-scm.com/
从这里下载适合自己环境的安装程序,并进行安装。
在安装VScode时,可以选择勾选“添加到资源管理器的文件/文件夹右键菜单中的[使用Code打开]操作”,这样可以直接通过右键点击文件夹来打开。非常方便。
另外,安装一个名为“git history”的扩展功能会很有用。
GitHub:https://github.com/
在GitHub上注册账号也可以。
设置密码
为了方便起见,可以在地址栏中输入“git-bash”,然后将路径添加到环境变量中,以直接在当前目录中打开。
-
- 在搜索框中输入“git”,右键点击并选择“打开文件位置”,应该会有一个快捷方式文件。
-
- 查找原始位置(默认为:C:\Program Files\Git),将路径复制。
- 在搜索框中输入“环境变量”,打开设置。打开环境变量,添加到“Path”。
最初的设置
-
- 请注册电子邮件和密码
git-bash
$ git config –global user.email “你的电子邮件”
$ git config –global user.name “你的名字”
设置SSH通信
cmd
rem 切换到用户目录
cd %userprofile%
rem 生成密钥
ssh-keygen -t <密钥类型> -C “<你的电子邮件>”
ssh-keygen -t ed25519 -C “EMAIL”
rem 会问一些问题,但都按enter键继续
没有扩展名的文件(文本数据)中含有私钥,.pub文件为公钥。
在github的设置中的SSHandGPGkeys部分添加sshkey(”公钥”)。
这是与github之间通信所必需的,因此每台通信的电脑都应该有。
cmd
rem 进行连接测试
ssh -T git@github.com
rem 如果一开始没有确定名称,会问一些问题,但选择yes继续即可。
基本使用方法
基本上
-
- 创建存储库(放置源代码等的地方)或克隆
-
- 在本地进行操作
-
- 保存更改的差异
-
- 上传到远程(GitHub)
-
- 从远程获取其他人的更改
- 重复步骤2至5。
在VScode中,可以使用Ctrl + Shift + G打开Git管理界面。
可以使用Ctrl + Shift + @打开控制台窗口。通过控制台窗口右上角附近的下箭头,可以将控制台类型更改为Git bash。
Git bash会显示当前的工作分支,所以很好用。
汇总详细的命令
-
- 创建或克隆存储库(放置源代码等的位置)。
-
- # 创建存储库
-
- $ git init
-
- # 将本地存储库与GitHub上的远程存储库关联起来
-
- $ git remote add <远程存储库名称,在大多数情况下为origin>
# 从GitHub克隆远程存储库
$ git clone
# 是GitHub存储库页面上按下“<> Code ▼”后出现的HTTPS、SSH或GitHub CLI的副本
在本地进行工作
保存更改差异
bash
# 将更改差异保存为二进制文件
$ git add <已更改的文件>
# 如果要批量选择更改的文件,请使用 .
# git add .
# 将更改差异保存为提交,并更新远程存储库。
$ git commit -m “<提交消息>”
上传到远程(GitHub)
bash
# 将更新后的本地存储库上载到远程存储库
$ git push origin <本地分支名>:<远程分支名>
# origin 是默认命名用于关联远程存储库的名称
# 如果本地和远程命名相同,则可以简写如下
$ git push origin <分支名>
# 即使远程不存在,也会被上传。
从远程获取他人的更改。
bash
# 将他人在远程上传的更改映射到本地
$ git pull origin <分支名>
除了这些之外,在进行工作时还需要”切换分支”。
分支自身的说明在下面的概念条目中。
-
- 移動
-
- 切り方
- マージ
迁移
切换到进行作业的分支。
# ローカルブランチの切り替えと変更の取り消し
$ git checkout <ブランチ名>
# 2019年のGit 2.23のリリースで追加されたswitchのほうがいいらしい
$ git switch <ブランチ名>
切法 (qiē fā)
增加流程,限制范围,进行工作。
一个从A分支切换到B分支的例子。
# AブランチからBブランチを切りたいときは、Aブランチに居る必要がある。
$ git switch <Aブランチ>
$ git branch <Bブランチ>
# ブランチの作成と切り替えを同時に。
$ git checkout <ブランチ名>
# 以下と同じ
$ git branch <ブランチ名>
$ git checkout <ブランチ名>
# switch で書くなら
$ git switch -c <ブランチ名>
合并
基本上就是將B分支的內容合併到A分支中,這樣做。
舉例來說,將B分支合併到A分支中。
指定合併的方向,即指定接收方和被接收方。
# AブランチにBブランチをマージしたいときは、Aブランチに居る必要がある。
$ git switch <Aブランチ>
$ git merge <Bブランチ>
听说麦琪大致分为两种。
# AブランチからBブランチを切った。
$ git switch Abranch
$ git branch Bbranch
如果在B分支被剪切之后,A分支没有更新提交,则只需将B分支的提交集合添加到A分支的最前端,这就是快进合并。
如果有更新,则不会使用快进合并,而是使用非快进合并。
各种概念和术语
如果能够充分理解存储库和分支等整体概念,暂时来说可能会很不错。
仓库

远程存储库
我把存储库放在了像GitHub这样的Web托管服务上。
通过这里,我可以协调分散的客户端的版本和进展。
本地仓库 dì
在本地开发环境中的代码库。Git能够检测出与这里的差异并将其称为”变更”。
顺便提供添加、提交和推送之间的关系示意图。
工作目錄
.git存放的目录。
打开这个文件夹在VScode中(按下ctrl + k, ctrl + o),进行实际操作。
通过使用 git add <目标文件> 将由作业引起的“更改”保存为二进制文件到暂存区域。
索引的演示区域
通过添加将差异和更改发送至保存位置。
具体而言:
.git/index:索引文件
.git/objects/:存放库的数据库文件。
通过使用git commit -m “<提交信息>”对这个差分进行提交,就可以创建提交并更新本地仓库。
本地代码库
通过提交生成的提交将更新最新提交。
通过执行`git push origin <分支名>`,可以将分支的更新同步到远程仓库。

分支
在Git中,变更历史是以提交(commit)为单位进行管理的。
提交(commit)以串联的方式存在,并通过分支(branch)来指定和管理从提交(commit)中进行的操作流程。分支(branch)的意思就是树枝或支流。
中国的本地翻译:
所谓分支模型,即有一定的规定来决定分支的切割方式。
这次我想谈一下git-flow。
它以develop分支为中心,用户们通过各自的功能分支/主要功能单元来进行工作。
作为一个插件,git-flow应该已经被包含在内了。

-
- main
リリース用のブランチ。
基本的に触らない。
develop
この軸を中心に開発。
複数開発なら管理者以外は触らない。
feature/
作業や機能ごとに切る。作業するユーザーはこのブランチを切る。
一通り作業したらプッシュしてマージリクエストする。
featureは消してしまってよい。
機能の意味そのまま。
其他的
-
- hotfix
リリース後のえぐいバグとか緊急でしばかなあかんやつ。
mainから直接切って修正後mainとdevelopそれぞれにマージ。
release
プレリリース用。
リリース予定の機能やバグフィックスが終了した状態のdevelopから切る。
準備が整ったらmainとdevelopそれぞれにマージする。
还有其他的选择。
追踪分支
在Git中,当有更新时,它会检测到,但它在监视什么以及与何进行比较呢?可以参考下图。
这就是远程追踪分支和上游分支。

起源
通常被称为远程名称。习惯上常用的名称是”origin”。
$ git remote add origin <リモートのURL>
当运行时的起源。
这里将URL放在名为origin的变量中来表示。
提交消息
提交时一定要设置消息。基本上,在括号内写上提交类型,然后在后面写上注释,例如”[hoge]piyopiyo”。写上为什么进行了这个更改,比通过查看代码能理解的注释更好。 例如:[update]为了~,将~修正为~。
评论可以写多行。
如果范围比较广的话,用英语写可能更好。
整理提交类型。
add: 新規ファイル
feat: 新しい機能
update: 機能修正
fix: 不具合バグ修正
remove: 削除
revert: 変更取り消し
docs: ドキュメントのみの変更
refactor: 使用に影響のないコード修正。
style: 体裁を整えた。空白とかインデントとかセミコロンとか
perf: パフォーマンス向上
test: てすと
拉
使用 fetch 命令来获取远程追踪分支和远程分支之间的差异,并将远程追踪分支的内容合并到工作分支以进行更新。而 pull 命令能够同时执行这两个操作。
# リモートからリモート追跡ブランチに更新を落とす
$ git fetch origin <ブランチ名>
# 上流のリモート追跡ブランチを作業ブランチにマージする
$ git merge origin/<ブランチ名>
合并请求(拉取请求)
这不仅仅是Git,更是由托管服务提供的功能。
对于个人开发来说,合并可能不是一个问题,但对于多人开发的情况,通过审查可以避免冲突,并记录交流内容。
在GitHub上的方法
-
- 按下push按钮。
-
- 从存储库菜单屏幕中按下Pull requests。
按下New pull request。
选择base和compare分支。
使用Create pull request创建请求。
填写标题和评论来请求。
管理员会查看Commits和Files changed以及对Pull requests进行评论。
管理员在完成审查后,按下Confirm merge来合并。
“.gitignore”的中文释义
如果你不想把这个文件提交到git中,也不想把不想要的文件上传到github上,你可以将它们从git的跟踪中排除掉。
你还可以使用通配符。
你还可以用“#”进行注释。
# /を含まない
# .gitignoreが配置されているディレクトリ以下にあるこの名前のファイルフォルダを無視する。
file_or_folder
# 末尾にのみ/を含む
# .gitignoreが配置されているディレクトリ以下にあるこの名前のディレクトリを無視する。
directory/
# 後述の!との相性が悪いからディレクトリ自体を除外するより
direcotry/*
# のようにしたほうがいい。
# 末尾以外にのみ/を含む
# .gitignoreが配置されているディレクトリをカレントディレクトリとする相対パスで指定されるファイルフォルダを無視する。
/path/pathpath/file_or_folder
# 末尾以外も末尾にも/を含む
# .gitignoreが配置されているディレクトリをカレントディレクトリとする相対パスで指定されるディレクトリを無視する。
/path/pathpath/dirctory/
# !を先頭に置く
# 例外・無視しないを表す。上での設定を上書きできる。
# ただしフォルダ例外は上書きできない。
! path
! directory/*.ext
# 空行や# で始まる行
# コメントとして認識
# test line
git只追踪文件,无法将空文件夹包含在仓库中。
要追踪空文件夹,需要在其中添加.gitignore文件。
! .gitignore
可以通过做某事来模拟追踪。
指令总结
# リポジトリの状況を確認
$ git status
# リモートリポジトリをローカルにクローン
$ git clone <URL>
# 特定のブランチを指定してクローン
$ git clone <URL> -b <落としたいブランチ名>
# 差分をステージング領域にバイナリとして保存
$ git add <対象のファイル。 "." で指定するとすべて>
# 差分に名前を付けてコミットとして保存
$ git commmit -m "<コミットメッセージ>"
# コミットをリモートリポジトリに反映させる
$ git push origin <ローカルブランチ名>:<リモートブランチ名>
# ローカルとリモートの名前が同じなら省略される
$ git push origin <ブランチ名>
# ローカルブランチ一覧
$ git branch
# リモート追跡ブランチを含むローカルブランチ一覧
$ git branch -a
# この際、リモートのブランチが反映されない場合がある。その際は git ls-remote を使ってリモートの更新を受け取る。
# ブランチが存在するか確認
$ git branch -a <検索したいブランチ名>
# ブランチの作成
$ git branch <ブランチ名>
# ローカルブランチの切り替えと変更の取り消し
$ git checkout <ブランチ名>
# 2019年のGit 2.23のリリースで追加されたswitchのほうがいいらしい
$ git switch <ブランチ名>
# ブランチの作成と切り替え
$ git checkout <ブランチ名>
# 以下と同じ
git branch <ブランチ名>
git checkout <ブランチ名>
# switch で書くなら
$ git switch -c <ブランチ名>
# ブランチの削除
$ git branch -d <ブランチ名>
# ブランチ名変更
$ git branch -m <変えたいブランチ名> <新しいブランチ名>
# リモートリポジトリの最新の履歴の取得
$ git fetch origin <ブランチ名>
$ git merge <追跡ブランチ名。例えばorigin/develop>
# 上二つのコマンドは一度にできる。他ユーザがリモートに上げた変更をローカルにも反映させる
$ git pull origin <ブランチ名>:
# 送るブランチを空にする、つまりリモートブランチの削除。
$ git push origin :<リモートブランチ名>
# 今いるブランチに指定したブランチを取り込む
# git merge <取り込むブランチ名>
# 根元の異なるブランチを強引にマージ
$ git merge --allow-unrelated-histories <取り込むブランチ名>
# リモートの更新を確認
$ git ls-remote
结束
我要成为Git的大师!!
参考崇拜的神圣网站
《サル先生的Git入门〜精通版本控制〜【项目管理工具Backlog】》
https://backlog.com/ja/git-tutorial/
《Git-flow ~了解Git分支模型~ | 版本控制系统入门(初学者向)》
https://tracpath.com/bootcamp/learning_git_git_flow.html
《通过GitHub进行ssh连接的步骤〜从生成公钥和私钥开始〜 – Qiita》
https://qiita.com/shizuma/items/2b2f873a0034839e47ce
《Git的HEAD身份是谁 – Qiita》
https://qiita.com/ymzkjpx/items/00ff664da60c37458aaa
《别再说Git的”tracking branch”了 – Qiita》
https://qiita.com/uasi/items/69368c17c79e99aaddbf
【初学者向】关于git fetch、git merge、git pull的区别 – Qiita
https://qiita.com/wann/items/688bc17460a457104d7d
非常感谢你。