Git 综合笔记

1. 推资料进新分支 (建立新分支 + 推资料进新分支)

(1)建立新专案
命名新专案,并记录网址
https://github.com/xxxxx/gittest.git

(2)新增资料夹,并移动进去

mkdir '资料夹名称'
cd '资料夹名称'

(3)将该资料夹与github专案连结(clone)

git clone https://github.com/xxxxx/gittest.git
目前为空,因为github上没资料

(4)进入github(gittest)资料夹

cd gittest

(5)加入档案or编辑档案
touch > git add . > git commit -m '备注'

(6)第一次推

git remote add '数据库名称'
git branch -M 分支名称
git push -u 数据库名称 分支名称

(7)更新资料(推送数据库到 Github)

git push
要输入帐号密码,确认是本人

建立分支
(8)建立分支

git branch '分支名称'
https://ithelp.ithome.com.tw/upload/images/20220101/20137684l3oSkR5cHK.png

(9) 浏览目前分支

git branch

(10) 移动到该分支

git checkout '分支名称'

(11) 进入该分支後,才能编辑分支内的资料、并查看更新

git status

(12) add + commit

git add .
git commit -m '备注'
https://ithelp.ithome.com.tw/upload/images/20220105/20137684EPPGG9wm9c.png

此时浏览分支有2,内容不同,push需要指定remote及branch
之所以会这样的缘故是因有非常多的数据库(有正式的或是测试用的),
那他第一个预设通常都是 origin 就像 master 一样
https://ithelp.ithome.com.tw/upload/images/20220105/20137684DivPfIrijg.png

(13) push
查询有多少个远端数据库

git remote
git push '数据库名称' '分支名称'
https://ithelp.ithome.com.tw/upload/images/20220105/20137684SelifNwx0m.png


2. 合并与冲突时

(1)两分支於同一线上且无冲突:

(2)两分支於不同线上且无冲突:

案例:
没变更主要branch,变更 更新branch:
主要branch(main)与更新branch(feature1)同时更新,无冲突时:
(a)先把HEAD移动到主要专案上

git checkout 'main(分支名称)'

(b)接着合并想合并的版本(两版本皆须已commit完成)

git merge 'feature1(分支名称)'

(c)此时主要分支就会有全部的资料

(3)两分支於不同线上且冲突:

案例:
主要branch(main)与更新branch(feature1)同时更新,有冲突时:
(a) 先把HEAD移动到主要专案上

git checkout 'main(分支名称)'

(b) 接着合并想合并的版本(两版本皆须已commit完成)

git merge 'feature1(分支名称)'

(c) 解决上图问题,无法自动合并故改为 手动合并
(d) add . + commit -m '备注'

(4)远端冲突(github)

(a) 档案拉下来

git pull

(b) 解决问题,无法自动合并故改为 手动合并
(d) add . + commit -m '备注'
实务上会使用git pull + git merge 先将同事资料拉下来
git push 到 github 会保留本地数据库commit


3. 补充常见指令

1.reset (版本还原)

(1)尚未push把commit还原(仍保留档案在工作目录)

git reset HEAD^

(2)尚未push把commit还原(档案删除)

git reset HEAD^ —hard

(3)还原所有,还原工作目录与索引,会与最後一次commit保持一样

git reset —hard

(4)尚未commit 索引档案退到工作目录

git reset HEAD

2.rebase

使用 rebase 合并

git rebase 'branch名称'
https://ithelp.ithome.com.tw/upload/images/20220105/20137684gzb67CrbNO.png

rebase vs merge

merge:
分支在同一条线上时,merge会快转
但分支在不同线上时,不会快转此时branch(main)内已经包含更新branch(feature1)
但更新branch(feature1)仍为原更新branch(feature1)
(git checkout feature1)
https://backlog.com/git-tutorial/tw/stepup/stepup1_4.html
rebase:虽然但分支在不同线上,但有快转效果(使分支在同一条线上),并有完整历史纪录

git reflog

3.remote (有关数据库)

(1) 远端版本库不止一个,这个命令会将它们全部列出来。

git remote -v
git2 https://github.com/xxxxx/tryconnect.git (fetch)
git2 https://github.com/xxxxx/tryconnect.git (push)
git3 https://github.com/xxxxx/text-1.git (fetch)
git3 https://github.com/xxxxx/text-1.git (push)
origin https://github.com/xxxxx/tryconnect.git (fetch)
origin https://github.com/xxxxx/tryconnect.git (push)

(2) 查询有多少个远端数据库

git remote

(3) 推资料进github
a. 将github与本地资料夹连结
git remote add '远端数据库名称' https://github.com/xxxxx/tryconnect.git
b. 新增branch main
git branch -M '分支名称'
c. 资料推到branch
git push -u '远端数据库名称' '分支名称'

4.cherry-pick

只挑自己想要的commit合并到其他branch
(1) 到该分支挑选想要的commit

git checkout '分支名称'
git log

https://ithelp.ithome.com.tw/upload/images/20220105/20137684ajR1BduZHl.png
(2) 回主要分支,抓取

git checkout '分支名称'
git cherry-pick 'log版本号'

https://ithelp.ithome.com.tw/upload/images/20220105/20137684Ig0kY5c9x2.png

5.reflog (查看历史纪录)

ex:还原不小心删除档案,救回来
(1) 查询历史纪录

git reflog

(2) 还原commit

git reset '想还原的编号'

(3) 查看commit(此时档案还没复原,仅复原commit)

git log

(4) 还原commit + 档案

git reset '想还原的编号' —hard

6.stash (暂存档案)

情境:资料写到一半做别的事情,很快就要回来继续写
(之前有commit过,但目前无需再更新commit)
(1)暂时储存当前目录

git stash

此时 git status 不会有东西(因非commit)
(2)浏览 git stash 列表

git stash list

(3)还原暂存

git stash pop

step1.回之前暂存过的分支
step2.还原 暂存档案(git stash)
(4)清除最新暂存

git stash drop

(5)清除全部暂存

git stash clear

(6)把暂存纪录带到其他branch作法:

git stash
git checkout '其他branch名称'
git stash pop

7.tag

标签是用於标记特定的点/提交的历史
通常会用来标记发布版本的名称/号码(如:v1.0)。
(1)新增轻量标签( 只新增标签 )

git tag '标签名称'

(2)新增标示标签( 新增标签 + 标签详细资料 )

git tag -am ''详细资料'' '版本名称'

(3)查询标签

git tag

(4)切换到该标签的commit

git checkout '版本名称'

切换回原本的

git checkout '分支名称'

(5)查询详细标签

git tag -n

(6)删除标签
删除标签不会影响commit的内容

git tag -d '标签名称'

8.status

git status用来看有init的资料夹内,档案情形
(1) modified file
如果更动任何一个project file,那只档案的状态就会变成modified。
(2) Changes to be committed
(将要提交的档案)
(3) Changes not staged for commit
(被更动但尚未要提交的档案)
(4) untracked file (未被追踪档案)
所有新增出来、还没用git add的档案
(5) new file
untracked file被git add之後,状态就会变成new file,commit之後就变成project file。
https://ithelp.ithome.com.tw/upload/images/20220117/20137684wo3FIEZwEg.png

9.revert

再做一个新的 Commit
来取消不要的 Commit

(1) git log 查看欲恢复的commit
(2) git revert ‘版本号’
此时 log 会多一个 commit
(3) git push
推到远端资料库
https://ithelp.ithome.com.tw/upload/images/20220117/20137684OHFPAfEdZ2.png
尽量不要一起做多个commit
因revert会恢复到该commit的全部状态
个别档案不好追历史纪录,会因此遗失


4.GIT步骤笔记

https://www.youtube.com/playlist?list=PLYrA-SsMvTPOZeB6DHvB0ewl3miMf-2tj

1. 有.git的隐藏档,开始版本控制

git init

2. Git log时才知道是谁制作

git config --global user.email "你的mail"
git config --global user.name "你的名字"

3. 查看git资料(内有姓名)

git config --list

4. 制作 + 索引 + 提交

mkdir '资料夹名称'
touch '档案名称'

git add .
git commit -m '备注'

检查

git status

5. 制作github专案

https://github.com/xxxxx/tryconnect.git

6. 让本地资料夹与 github 连结 使用token

*remote非branch名称
*可在config档案内看到remote资料

(1)将github与本地资料夹连结
git remote add '远端数据库名称' https://github.com/xxxxx/tryconnect.git
(2) 新增branch main
git branch -M '分支名称'
(3) 资料推到branch
git push -u '远端数据库名称' '分支名称'

此时档案config内会显示连结的git网址
url = https://github.com/xxxxx/tryconnect.git

7. 更新github(远端数据库)

git add .
git commit -m '备注'
git push
git push '数据库名称remote' '分支名称branch'

8. HEAD指标使用checkout回去以前commit观看

HEAD预设都会指向最新的commit

git log
git checkout '前四码'
git checkout "master or main...(看要回去哪个分支)“

9. 分支branch

branch就像是便利贴,会贴在commit位置上
前述6.将github与本地资料夹连结时有建立分支

(1) 开新分支

git branch '分支名称'

(2) 浏览目前分支

git branch

(3) 切换分支
会去到该branch的最新commit处,HEAD也会过去

git checkout '分支名称'

(4) 合并分支

A.合并分支
仅有更新branch(feature1)时

a. 先把HEAD移动到主要专案上

git checkout 'main(分支名称)'

b. 接着合并想合并的版本(两版本皆须已commit完成)

git merge 'feature1(分支名称)'

c. 此时主要分支就会有全部的资料

B.自动合并
(1)主要branch(main)与更新branch(feature1)同时更新,无冲突时:
(a)先把HEAD移动到主要专案上

git checkout 'main(分支名称)'

(b)接着合并想合并的版本(两版本皆须已commit完成)

git merge 'feature1(分支名称)'

(2)主要branch(main)与更新branch(feature1)同时更新,有冲突时:
同一行不同内容

(a) 先把HEAD移动到主要专案上

git checkout 'main(分支名称)'

(b) 接着合并想合并的版本(两版本皆须已commit完成)

git merge 'feature1(分支名称)'

(c) 解决上图问题,无法自动合并故改为 手动合并

(d) add . + commit -m '备注'

https://backlog.com/git-tutorial/tw/stepup/stepup1_4.html

  1. 如果源头一样就会快转branch(main)=原更新branch(feature1)
    https://ithelp.ithome.com.tw/upload/images/20220116/201376840dPfkgru7h.png
  2. 源头不同时,不会快转
    https://ithelp.ithome.com.tw/upload/images/20220116/20137684wVkt7fPfLr.png
    https://ithelp.ithome.com.tw/upload/images/20220116/20137684yFGZs4JF41.png
    此时branch(main)内已经包含更新branch(feature1)
    但更新branch(feature1)仍为原更新branch(feature1)
    (git checkout feature1)

10. git Reset 版本还原

reset可以带着HEAD及branch到别处的commit
(1)把commit还原(仍保留档案在工作目录)

git reset HEAD^

(2)把commit还原(档案删除)

git reset HEAD^ —hard

(3)还原不小心删除档案,救回来
a. 查询历史纪录

git reflog

b. 还原commit

git reflog ’想还原的编号’

c. 查看commit(此时档案还没复原,仅复原commit)

git log

d. 还原commit + 档案

git reflog ’想还原的编号’ —hard


5.其他技巧

A. 开启资料夹

open .

B. 偷懒设定缩写指令
Git 缩写:

git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.st status
git config --global alias.ci commit

C. 观看所有 config (档案)的设定:
Mac:~/.gitconfig
Win:C:\Users$USER

D. 尚未add(索引)的档案,删除
查看

git clean -n
删除
git clean -f

E. 索引档案退到工作目录

git reset HEAD

F. Github只有一个分支时可直接用git push会推到Github,
若有新增其他分支则使用git push -u ’远端数据库名称’ ‘分支名称’

G. Github的Source 要对外给人家看的branch

H. 实务上要 推资料 时
1.git checkout 分支
2.git pull 先将同事资料拉下来
3.git merge 或手动修改冲突合并
4.git push 再推上资料

I. 作业时,先将档案更新至最新(pull)再作业


6. 分支图观看

VScode 安装 Git Graph 选支线
https://ithelp.ithome.com.tw/upload/images/20220105/20137684cZqDG3AvxP.png


7. Git Flow (分支应用情境)

Master 以及 Develop > 长期分支

Master:

主要是用来放稳定、随时可上线的版本。来源只能从别的分支合并(merge)过来,tag版本。

Develop:

所有开发的基础分支,当要新增功能的时候,所有的 Feature 分支都是从这个分支切出去的。而 Feature 分支的功能完成後,也都会合并回来这个分支。

Hotfix:

当线上产品发生紧急问题的时候,会从 Master 分支开一个 Hotfix 分支出来进行修复,Hotfix 分支修复完成之後,会合并回 Master 分支,也同时会合并一份到 Develop 分支。

Release:

Develop 分支够成熟了,就可以把 Develop 分支合并到 Release 分支,上线前的最後测试。测试完成後,Release 分支将会同时合并到 Master 以及 Develop 这两个分支上

Feature:

新增功能时使用,Feature 分支都是从 Develop 分支来的,完成之後会再并回 Develop 分支。
https://ithelp.ithome.com.tw/upload/images/20220117/20137684DsZNf4rjVE.png


<<:  RSA公开金钥加密的数学知识

>>:  STM32F746 画图

Day11 Vue directives(v-on & v-bind)

到底什麽式Vue directives Vue directives简单来说就是一种可以挂在HTML...

Day 26:IIO (Part 4) - 帮感应器写驱动程序!以 TCRC5000 为例

这篇将会综合前面的 GPIO 与 IIO 的知识,帮一个常见的红外线感测器 -- TCRC5000 ...

Day 8 ( 中级 ) 猫咪跑步 ( 超长背景 )

猫咪跑步 ( 超长背景 ) 教学原文参考:猫咪跑步 ( 超长背景 ) 这篇文章会介绍,如何在 Scr...

30天零负担轻松学会制作APP介面及设计【DAY 25】

大家好,我是YIYI,今天我要来展示过去24天来努力的结晶了。 影片介绍 一开始会进入写着SECRE...

Day 8. Hashicorp Nomad: Application Logs

Hashicorp Nomad: Application Logs AP log又多又杂,相信大部分...