最近公司代码管控比拟乱,有天就利用分支进行了代码梳理,过后就遇到一些困惑,抽空就把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> # 克隆近程仓库到本地,指定本地文件夹名 directorygit 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 # 查看配置列表 简写 -lgit 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.namegit config --global --unset user.email# 配置命令别名,简化输出git config --global alias.co checkoutgit config --global alias.ss statusgit config --global alias.cm commitgit config --global alias.br branchgit 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.xxxgit config --global --unset user.xxxvim ~/.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.vuegit mv src/components/demo.vue src/components/demo-change.vuegit 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]](https://git-scm.com/docs/gitignore/zh_HANS-CN)疏忽)。前者是你通过运行
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-localgit 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 filesgit clean -fd # 连 untracked 的目录也一起删掉git clean -xfd # 连 gitignore 的untrack 文件/目录也一起删掉 (慎用,个别这个是用来删掉编译进去的 .o之类的文件用的)# 在用上述 git clean 前,倡议加上 -n 参数来先看看会删掉哪些文件,避免重要文件被误删git clean -nxfdgit clean -nfgit clean -nfdgit 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>换成你本人失去的令牌。<USERNAME>是你本人github的用户名,<REPO>是你的项目名称.即可执行 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 --deletegit 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
到指定的状态 官网)文言: 回退版本,能够指定退回某一次提交的版本,也就是撤回暂存区的的提交代码(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 所指向的提交idgit checkout mastergit reset --hard 0c72e64git 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_Storenode_modules/dist# local env files.env.local.env.*.local# Log filesnpm-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