最近公司代码管控比较乱,有天就运用分支进行了代码整理,当时就遇到一些困惑,抽空就把git
再学了一下。
以前我是用
git
指令的,可是敲指令对我来说仍是有点麻烦(主要是git 功力不够),看到有同事用git桌面版(毕竟git官方的亲儿子)我也就跟着用了,不得不说真香,不过也有些约束,。当然现在许多IDE也都支撑Git,并且也很强大,比如微软的 VSCode 对吧,引荐大家运用起来。
这篇文章拖了好久,最近整理基础时索性就把这篇完善了。
几个概念:
-
版别库:git在本地开辟的一个存储空间,一般在 .git 文件里。
-
作业区(workspace): 便是修正器里边的代码,咱们平常开发直接操作的便是作业区。
-
暂存区(index/stage):暂时寄存文件的地方,
git add
后也就将作业区代码放到了暂存区(缓冲区)。 -
本地库房(Repository):
git commit
后便是将暂存区的代码放到本地库房。 -
长途库房(Remote):线上代码寄存的地方,如 github/gitee。
资料均来源于网络,文章主要是自己的的一些操作实践和了解。行文假如 有误还希望谈论指出,一起交流
四种状况
先安装个 Git
(Git – Downloads)
git --version # 看看Git 当时版别
git update-git-for-windows # windows 更新
菜鸟教程有个 (图解 Git | 菜鸟教程) 感觉对某些指令的描述还挺直观的。
当然最好的文档便是官方文档 Git – Reference,有啥疑问就往这看就行~~
常用指令
<variable> 尖括号内表明变量。 [optional] 中括号内表明可选
基础指令
公钥生成
ssh-keygen -t rsa -C 'your-emial-dress' # 生成公钥
cd ~/.ssh # 切换该目录
cat id_rsa.pub # 检查公钥内容
然后在 同性结交网站github settings --> ssh
公钥处张贴即可。
git help <instruction>
检查某条指令
初始化(clone/init)
git clone <repo-url> # 克隆长途库房到本地(新建一个与线上库房同名的文件夹),仅克隆默许分支的代码,
git clone <repo-url> <directory> # 克隆长途库房到本地,指定本地文件夹名 directory
git clone -b <branch> <ropo-url> # 克隆长途库房(的指定分支branch)到本地
git init # 本地新建/初始化(假如存在)一个git库房,根目录创立 .git 文件,即版别库
git init --bare # 生成裸库,没有 .git 文件只要一些前史版别的记载文件,让源代码与版别库分离
git init 指令创立一个空的Git存储库 – 本质上是一个 .git
目录,其间包含 objects
、refs/heads
、refs/tags
和模板文件的子目录。还将创立一个引用master分支 HEAD 的初始 HEAD
文件
装备
--global
便是大局装备(针对一切库房)
cat .git/config # 本库房检查装备文件
cat ~/.gitconfig # 大局装备文件检查
git config --list # 检查装备列表 简写 -l
git config --global --list # 检查大局装备列表
git config [--local|--global|--system] --list # 检查 本地库房|大局|体系 装备列表
# 装备大局用户(用户名和邮箱)
git config --global user.name "用户名"
git config --global user.email "git账号邮箱"
# 删去大局用户信息
git config --global --unset user.name
git config --global --unset user.email
# 装备指令别号,简化输入
git config --global alias.co checkout
git config --global alias.ss status
git config --global alias.cm commit
git config --global alias.br branch
git config --global alias.rg reflog
# 装备log别号,顺便一些装备,当然也能够在 git lg 后边加指令参数,如: git lg -10 显现最近10条提交
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
# 上述 装备后 git log 的信息大概是: 84b2f5d - edit2 (45 minutes ago) <OFreshman>,有颜色符号
# 删去大局装备
git config --global --unset alias.xxx
git config --global --unset user.xxx
vim ~/.gitconfig # 修正装备
git config --global init.defaultBranch <branch> # 装备初始化库房的默许分支
#git init 本地初始化 master, 线上库房 新建 main 是默许
长途装备,本地库房与线上库房相关就需求装备长途
git remote add <name> <repo-url> # 装备长途链接
修正和提交
git status # 检查本地是否有更改(提交状况),作业区与暂存区
git status -vv # 检查本地的更改,顺便文件更改细节
git status -s # 检查修正的文件
git diff # 检查更改内容,(作业区和暂存区)
git diff catched # 检查更改内容,(暂存区和本地库房)
git add . # 提交一切更改一切至暂存区(当然被疏忽的文件不会被提交)
git add . -f # 被疏忽的文件也添加上
git add <file> # 只提交某个文件至暂存区,file是文件途径
git mv <new-file> <old-file> # git mv 指令用于移动或重命名一个文件、目录或软连接(条件是已add或许暂存了)
# Eg: 将demo.vue更改为 demo-change.vue
git mv src/components/demo.vue src/components/demo-change.vue
git commit -m "提交信息" # 给暂存区域生成快照并提交
git commit --all -m "提交信息" # 同等于 git add . && git commit -m,
# 简写 git commit -am ""
# 留意 仅针对 追踪过&修正过 的文件,新增的文件是不能够的
git commit --amend # 修正最近一次提交信息,按 i 进入修正,esc 然后输入:wq 回车退出即可
git commit --amend --only # 修正最近一次提交信息; 按 i 进入修正,esc 然后输入:wq 回车退出即可
git commit --amend --only -m '提交信息修正' # 修正最近一次提交信息一步到位
git status
显现索引文件和当时HEAD提交有差异的途径,作业树和索引文件有差异的途径,以及作业树中不被Git追踪的途径(也不被gitignore[5]疏忽)。前者是你通过运行
git commit
会提交的东西;第二和第三者是你在运行git commit
之前通过运行git add
能够提交的东西
检查提交前史
git log # 检查一切提交前史
git log -5 # 检查最近五条提交前史
git log --oneline # 单行检查最近提交前史 --pretty=oneline --abbrev-commit 合用的简写
git log --graph # 检查日志图,假如存在兼并时,看起来较为清晰
git log --pretty="%h, %s, %ad" # 单行检查日志,顺便时刻
git log --format="%h, %s, %ad" --date=short # 能够限制时刻格局,short只显现年月日。
git log --format="%h, %s, %ad" --date=local # 设置时刻时区,大局装备 git config --global log.date local.。
# 不习惯月日年是英文的,能够设置日期为 ISO
git log --pretty="%h, %s, %ad" --date=iso
# 当时库房log date格局 git config log.date iso-strict-local
git log --format="%h, %s, %ad" --date=short --author="OFreshman" -3 只检查作者 OFreshman 最近三条提交
我的日志打印设置
git config --global alias.lg "log --color --graph --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%a d) %C(bold blue)<%an>%Creset' --abbrev-commit"
以上是之前 windows 的设置, 后边我在Mac上时刻出不来(我看官网没有不支撑星期几了)应该略作修正
git config --global alias.lg "log --color --graph --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cd) %C(bold blue)<%an>%Creset' --abbrev-commit"
作用差不多这样
git lg -3
更多参阅:
git log指令全解析_碧海凌云的博客-CSDN博客_git log (自己按需装备你想要得即可)
Git/git-log|pretty_formats
iterm2 git 在检查提交前史、装备,分支等信息时,退出需求 ↑ + q
检查操作记载
git reflog # 检查一切操作记载,英文状况 按q 退出
推 / 拉代码
git fetch # 将会更新一切的长途分支
git fetch <remote-name|repo-url> <branch> # 从长途 remote-name 上拉取 branch 分支的代码
git pull # 将会兼并长途的默许分支到本地的当时分支
git pull <remote-name> <branch> # 从长途 remote-name 上拉取 branch 分支的代码并与当时分支兼并
# 相当于 git fetch + git merge <remote-name>/<branch>
git pull origin --allow-unrelated-histories # 答应兼并不相关的前史
git push <remote-name> <branch> # 将当时分支代码 推 到长途库房
# 假如长途只要一个 主机remote-name, 则后边可省掉,如
git push
# 为推送当时分支并树立与长途上游的盯梢
git push --set-upstream origin main
# 假如有多个主机名,可通过 -u (--set-upstream-to)设置默许主机,git push时则会推送到 默许主机默许分支
git push -u <default-remote> <branch>
git push -f <remote-name> <branch> # 将当时分支代码 强推 到长途库房
丢掉(discard)作业区的改动
git restore <file>
删去文件 git rm
当有些 提交过 的文件不需求了就能够删去掉.
git rm <file-path> # 删去文件 从本地版别库中删去
git rm -f <file-path> # 强制删去文件,假如修正过且已放暂存区
git rm --cached <file-path> # 仅删去暂存区,保存作业区
git rm -r <dir-path> # 递归删去,删去dir文件下一切子文件
铲除文件 git clean
从当时目录开端,通过递归删去不受版别操控的文件来整理作业树。
一般,只会删去 Git 不知道的文件,但假如
-x
指定了该选项,也会删去疏忽的文件。例如,这对于删去一切构建产品很有用。简单来说: 删去作业区未被追踪的文件(Untracked files)
当然, 也能够通过装备 .gitignore
来让文件 不提示
git clean -f # 删去 untracked files
git clean -fd # 连 untracked 的目录也一起删掉
git clean -xfd # 连 gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
# 在用上述 git clean 前,主张加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
git clean -nxfd
git clean -nf
git clean -nfd
git clean -f -d -i #递归删去Untracked 文件,支撑交互,引荐这种办法
对于交互式删去(加 -i
),举个比如:
能够看到有几个选项,1 递归删去一切;3, 数字挑选 ,能够单个数字,也能够1-3,挑选1到3(满足了就 enter
退回主菜单,挑选1铲除即可), 4 便是会询问每个删去的文件。
长途装备 git remote
git remote -v # 检查本库房连接的长途/线上库房信息
git remote add <remote-name> <repo-url> # 添加长途库房信息
git remote remove <remote-name> # 移除长途链接
git remote set-url <remote-name> <ropo-url> # 设置新的链接
git remote set-url [--push] <name> <newurl> [<oldurl>] # 修正并推送(待测验
上述办法装备会在某些操作时需求确认账号和密码,比较繁琐。 补充一下 person access token
办法
settings => Developer settings => Personal access tokens(个人访问令牌) => tokens (classic) => Generate new token => 设置 token过期时刻(我主张设置成 永远 省劲, github不主张)和权限规模(主张都选上省劲)=> 点击 Generate token => 仿制令牌去修正本地库房的 remote 就行了
git remote set-url <remote-name> https://<your_token>@github.com/<USERNAME>/<REPO>.git
将<your_token>换成你自己得到的令牌。是你自己github的用户名,是你的项目名称.即可履行 pull/push 操作。
标签 git tag
这个我不常用(适合发版的时分打标签),作用基本和commit相同,意图是为了你要回滚是能够挑选便于回忆的自定义tag,而不是繁琐的 commit id
.
git tag <tagname> <commit id> #为某一次提交打标签
git show [tagname] # 检查标签信息
git tag -d [tagname] # 删去标签,标签为本地创立,所以是本地安全删去
git push origin [tagname] # 推送某个标签(对应的提交版别)到origin长途
git push origin --tags # 推送悉数本地标签到origin长途
git push origin :refs/tags/<tagname> # 能够删去一个origin长途标签,此刻是本地标签推送到了长途,先删去本地。
分支管控 git branch
+ git checkout
分支是啥呢,分支便是分支,emm…,废话文学
指向 commit 的指针。分支名便于回忆。
git branch -v # 检查本地一切分支
git branch -r # 检查长途分支
git branch --all # 检查本地和长途分支 缩写 -
git branch <branch> # 新建分支 ①
git checkout <banch> #切换至 branch 分支 ②
git checkout <commit-id> #切换至 特定的commit ③
git checkout -b <branch> #新建分支并切换到该分支 ④ = ① + ②
# ③ 能够将过去的某个提交check出来,此刻是个游离(detached)分支,能够 git switch -c <新分支名> 或许 ④ 持续根据该提交开发
# 运用 ③ 甚至能够找到 以前删去分支上的commit(运用 git reflog,分支仅仅是个指针)
git branch -D <branch> # 删去本地分支,强制
git branch -d <branch> # 删去本地分支,会检查是否被merge --delete
git branch -m <old-branch> <new-branch> # 更改分支命名
git push <remote-name> :<remote-branch> # 删去长途分支(推一个空分支给长途test分支)
git push -d <remote-name> <branch> # 同上 -d 与 --delete同等
git push <remote-name> <local-branch>:<remote-branch> # 长途新建分支并将本地分支推送上去
#Eg: 新建origin长途分支 test,并将本地分支test 推送上去
git push origin test:test
#清空作业区一切改动(还没git add),留意只能清空文件夹的改动,不能
git checkout <file>
git checkout -- <file> # 丢掉作业区某个文件改动
git checkout -- <file> # 丢掉作业区一切改动
分支兼并 git merge
分支兼并即将两个分支的代码进行兼并,假如 a 分支要与 b 分支兼并,假如以 b 分支为主,则先切到 b 分支在兼并,
兼并前需求确保作业区没有未提交的代码
git merge <branch> # 当时分支与 branch 分支兼并
git merge --allow-unrelated-histories <branch> # 答应不相干的前史兼并,信任有朋友遇到过
git merge --ff <branch> # 默许便是此选项,即fast-faward,不会和兼并前史和兼并信息
git merge --no-ff -m 'descriptions' <branch> # 当时分支与 branch 分支兼并
# --no-ff 有兼并记载且前史中有两个分支的提交记载
git merge --ff-only <branch> # 强制运用 --ff模式兼并,不过有分叉的状况,兼并不生效
git merge --continue # 兼并有抵触了,处理抵触 add 之后运行该指令(持续兼并,会有提示)相当于 commit
代码暂存 git stash
git stash 后代码就会复原为最近一次的提交(commit)或许暂存(stash)
本质上是将作业区的代码寄存至暂存区,可是 git commit
时不会提交
git stash # 暂存作业区代码
git stash save "暂存信息" # 暂存顺便信息
git stash list # 暂存列表,从上到下,新到旧
git stash apply # 运用最新一次暂存
git stash pop # 运用最新一次暂存,和上面相同
git stash apply stash@{1} # 运用次新的暂存
git stash clear # 删去一切暂存
git stash drop # 删去最新一次暂存
代码回滚 git reset
重置当时
HEAD
到指定的状况 [官网](Git – git-reset Documentation)文言: 回退版别,能够指定退回某一次提交的版别,也便是撤回暂存区的的提交代码(add之后)
git reset [--soft | --mixed | --hard] [HEAD]
git reset HEAD <file> # 从暂存区回退某个文件,仅git add之后的,
git reset HEAD^^ # 回退一切内容到上一版别(撤销最近一次的提交),window版别需求两个 ^,一个的话会提示 More ?
git reset --hard # 清空暂存区的代码,重置为前次一次的提交
git reset --hard HEAD^^ # 同上
# push 之前可履行上面操作, 假如 push 后,reset后,强推即可。
git reset --hard origin/<branch> # 回退到和 线上 分支branch 相同
git reset --hard <commit-id> # 回退到某个commit, git log 检查commit id
# 留意 对于 git commit 之后的代码回滚,需求指定 commitid, 且该commit之后的提交都会被重置掉。
默许参数是 –mixed , 作业区代码被保存,暂存区和本地库房被清空。
举个比如,现在顺次有 a, b, c 三个提交(c最新),我重置到 a(git reset <commit-id-of-a>
),那么现在修正器(作业区)的代码 仍是最新 c 的代码,可是 b,c 的提交的代码此刻处于 未提交状况(git status 检查),能够挑选性的增删,然后 git add && commit
提交即可,也能够运用 git checkout -- .
丢掉掉。
留意:慎重运用 –hard 参数,它会删去回退点之后的一切提交和一切没有commit的内容,并且会修正commit前史。这或许更像咱们了解的回滚,但或许不是咱们想要的回滚,咱们或许需求回滚后 保存回退点之后的代码(在作业区,git status 可检查到未提交),那么就需求 –soft
git reset --soft HEAD~2 # (柔软的)回滚到上前次提交,保存前次提交代码
git reset --soft <commit-id> # 回退到指定的提交,
# 且保存了 该提交到最新提交的代码(期间删去的文件不会在)
[HEAD] 有两种表明办法(window 上 符号好像有些问题):
-
HEAD
当时版别,HEAD^
上一次,HEAD^^
上前次,…. -
HEAD~0
当时版别,HEAD~1
上一次,HEAD~2
上前次,….
更改提交 git rebase
能够对某一段线性提交前史进行修正、删去、仿制、张贴;因此,合理运用rebase指令能够使咱们的提交前史洁净、简练!
进入修正状况: i
退出并保存:esc + : + wq
-i
参数便是支撑交互式的去操作,引荐,
# 当时 curent 分支变基至 branch 分支, current当时分支的基底是 branch 分支的最新提交
git rebase <branch>
git rebase -i [startpoint] [endpoint]
# 慎重运用[endPoint] 省掉, 即默许表明从起始commit一直到最终一个,可是一旦你填写了, 则表明 [endPoint]后边的commit悉数不要了!
git rebase -i <commitId> # 兼并commitId 到当时的提交
git rebase -i HEAD~3 # 修正最近三个提交
# 将 startpoint 与 endpoint 的提交仿制(追加)到 branchName 上
git rebase [startpoint] [endpoint] --onto [branchName]
# 别的还需切换到该分支(master),将其所指向的提交ID指向当时 HEAD 所指向的提交id
git checkout master
git reset --hard 0c72e64
git rebase --skip # 跳过提交
git rebase --abort # 撤销rebase,当某些重做履行到一半的时分,临时懊悔就能够履行此指令
git pull <branch> --rebase # 简化拉取代码的信息
# 同等于 git fetch origin + git rebase <branch>
变基
对于变基操作 git rebase <branch>
(当时分支为current), 找到 current 与 branch 分支 一起的提交 a, 假如找不到 则为各自分支的第一个提交,
将 current 分支上 a到最新的一切提交 追加至 branch 分支上 a到最新的一切提交。然后将整个提交追加到a上组成的提交前史。
它和merge相同都是兼并其他分支的代码,不相同的是:
merge
会发生一条新的merge commit
,且有一次抵触兼并(假如存在),rebase
则不会发生新的提交记载,且不会有 分支兼并 前史,且需求至少一次(取决于变基的当时分支有多少新的提交)的抵触(假如存在)兼并。
举个比如, local
此刻有如下提交
rebase-test
有如下提交
能够看到公共的提交 是从 955f4c5
开端的
然后在 local
上变基
git rebase rebase-test
然后 处理 抵触持续 rebase,此刻注释中的 pick 能够打开(去掉#),也便是说需求保存该提交。
假如你此刻懊悔了,能够用 git rebase –abort 撤销你的变基操作
git add . && git rebase --continue
接着修正提交信息,默许是 local
的最终一次提交,我改了之后然后保存.
看到本来 local
上新的提交没有了,发生了一切新的 commit(commit id
变了,commit注释没变,处理抵触时我改了其间一个提交信息)
变基成功后,local
上新的四个提交成功的根据(跟在) 了 rebase-test
的最新的提交(后), 本来是根据(跟在)一起的提交 955f4c5
(后)。
更改提交前史
当输入 git rebase -i HEAD~3
后,进入修正页面,最新在下面
三次提交信息 前面都有pick,这里的pick是一个指令,能够改成指令集中(reword/edit/squash…)恣意指令,来履行相应的操作。
在上面图中我要更改最近一次和第三次的提交信息,退出保存后,会提示两次交互,顺次让你去更改提交信息,两次都保存好后就算完成了。
提交信息得到了改动
git rebase 处理的抵触,就用
git add .
添加至暂存区, 不能commit, 然后git rebase --continue
rebase的几个指令解说:
-
pick (p: 保存该commit
-
reword (r: 保存该commit,但仅需求修正该commit的注释
-
edit (e: 保存该commit, 但我要停下来修正该提交(不仅仅修正注释)。a->b->c 修正a提交,
b,c 提交在rebase之后将不复存在,会被兼并。可是a提交存在(差异于后边两个指令)
-
squash (s: 将该commit兼并到前一个commit
-
fixup (f: 将该commit兼并到前一个commit,但不要保存该提交的注释信息
-
exec (e: 履行shell指令
-
drop (d: 丢掉该commit
仔细观察的话,通过 reabse -i
之后 修正的提交, commit id 都发生了变化(即使那些未修正的提交)。
假如有这样的状况,同事在master(现在有 a, b, c三个提交, c是最新)切了一个 feature 分支,然后我在 master 分支改了a提交 (rebase 办法),那么a,b,c的commit-id 就变了, 同事这会开发完了新功能,我就将 feature 分支兼并到master,commit id 不同就会将 feeature 分支的 a,b,c处理为新的提交。
成果就会有 三个重复的提交:
a (master,修正的), b(master),c(master),a(feature),b(feature),c (feature)
这可不是我想要的,所以牢记:
只对没有推送或未共享给别人的本地修正履行变基操作整理前史, 从不对已推送至别处的提交履行变基操作
关于rebase,限于篇幅没有把我实践的一切状况列出来,假如需求了解的更全面一些,这里有一些参阅:
【git 整理提交】git rebase -i 指令详解_the_power的博客-CSDN博客_git rebase-i git rebase详解(图解+最简单示例,一次就懂)_风中一匹狼v的博客-CSDN博客_git rebase
git rebase的两种用法(最全)_小垚尧的博客-CSDN博客_git rebase
回退代码 git revert
将现在的提交回滚至指定提交,并生成一条提交记载
git revert HEAD # 回退最终一次提交
git revert --no-commit HEAD~3..HEAD # 回退至倒数第三个提交并坚持未commit的状况
git revert <commit-id> # 回退至某一次提交
git revert <commit-id>..<commit-d> # 回退多个提交
举个比如:我要回退最新的提交,现在有四条提交前史
履行 git revert HEAD
, 进入 vi 界面, 默许提交信息是 Revert "three"
(假如修正 按 i 修正,然后esc退出),然后 :wq
退出保存,再次检查前史
能够看到多了一条新的 commit, 此刻作业区的代码即为 上前次(24be709
)提交的代码!
回退多个提交:
在回退的两条注释后边我追加了 commit。作业区代码为最近第三次提交的代码!
假如有抵触就需求兼并,兼并完持续 就 git revert --continue
, 直至一切提交都回退完
再举个比如:回退本来的某一次过错提交
摘取提交 git cherry pick
给定一个或多个现有提交,运用每个提交引进的更改,为每个提交记载一个新的提交。这需求您的作业树清洁(没有从头提交的修正)。
git cherry-pick <commit-id> # 摘取某个提交
git cherry-pick <commit-id1> <commit-id2> # 摘取多个提交,非接连
git cherry-pick <commit-id1>^..<commit-id2> # 摘取多个提交,接连
git cherry-pick --abort # 撤销
git cherry-pick --quit # 推出
将已经提交的 commit,仿制出新的 commit 运用到当时分支里,文件的增删都会更新,发生抵触时, cherry-pick 的提交回作为 incoming change,在vscode里操作很便利。
举个比如,这里有三个提交。
摘取最近第三次提交(e20d261
)
成果便是添加了一次提交(fa68143
和 e20d261
的兼并)
别的留意:最终的commit中, pick commit
与 last commit
添加的文件会存在,删去的文件不会存在!相当于 <last commit> merge <pick commit>
。
.gitignore文件
这个文件操控着 Git 对哪些文件疏忽
.DS_Store
node_modules
/dist
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/build/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
一些场景
从0-1
本地库房怎样和线上库房做相关呢?分以下几种状况
- 线上本地都没有(①)
-
本地新起一个项目 app,
-
线上库房新建一个(主张同名)同名项目 app。
-
本地装备长途相关的url(参阅
git remote
), 然后git push -f
强推。
- 线上有了,本地没有(②)
参阅 ① 步骤2,3
-
本地没有线上有(③)
克隆到本地即可(参阅
git clone
) -
线上和本地都有,只是没相关起来(④)
本地装备长途相关的url(参阅
git remote
),再 pull(fetch + merge) 下来即可(别的假如有抵触需求处理掉), 需求推的时分树立 相关git push --set-upstream <remote-name> <remmote branch>
。
丢掉作业区的更改
现在我修正器(作业区)写了一些代码,可是我不想要了,此刻没有提交到(git add),name直接丢掉掉就好了
git checkout -- <file>
#Eg: 丢掉 文件 demo-change.vue的更改
git checkout -- src/components/demo-change.vue
提交信息错了,我想改
参阅 git rebase
或许 git commit --amend
修正最终一次提交
更改提交次序 场景在哪??
仍是 git rebase
.
小技巧:非(vi/i)模式,dd 剪切(光标),p张贴,张贴至光标的下一行
兼并屡次提交,使提交记载更洁净
git rebase
结合指令 squash
删去 git 库房
find . -name ".git" | xargs rm -Rf
# 或许直接删去 .git 目录
rm -rf .git
参阅
Git – Reference
Git速查手册(第三版) | AnSwEr’s Blog