git 小轿车 开车了
2019-04-15 09:32 WEB前端小菜鸟 阅读(408) 评论(0) 编辑 收藏 举报1.2什么是版本库?
什么是版本库?版本库又名仓库,英文名repository,你可以简单的理解一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改,删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻还可以将文件”还原”。
就好比银行的保险箱,每次往里存钱,都会记录谁,什么时间,存放多少钱,存入的原因等。
git:版本库,核心思想:存储快照(备份),而是不存储差异
工作区:就是你在电脑里能看到的目录。
暂存区(缓存区):英文叫stage, 或index。一般存放在".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。--》数据暂时存放的区域,可在工作区和版本库之间进行数据的友好交流
版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。git中的head/master是分支,是版本库。--》存放已经提交的数据,push 的时候,就是把这个区的数据 push 到远程仓库了。
下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:
图中左侧为工作区,右侧为版本库。在版本库中标记为"index" 的区域是暂存区(stage,index),标记为 "master"的是 master 分支所代表的目录树。
Workspace:工作区
Index / Stage:暂存区
Repository:仓库区(或本地仓库)
Remote:远程仓库
# 列出所有本地分支
git branch
# 列出所有本地分支和远程分支
git branch -a
# 新建一个分支,并切换到该分支
git checkout -b [branch]
# 切换到指定分支,并更新工作区
git checkout [branch-name]
# 删除分支
git branch -d [branch-name]
# 添加当前目录的所有文件到暂存区
git add .
# 提交暂存区到仓库区
git commit -m ‘做了哪些修改做说明’
# 显示有变更的文件
git status
# 显示当前分支的版本历史
git log(可以查看到历史提交,判断是否是最新代码)
# 取回远程仓库的变化,并与本地分支合并
git pull [remote] [branch] 这个命令我还是比较常用,测试分支dev 我的本地分支:eg my-bendi , 当然其他开发也有自己分支,
eg:
current branch:(my-bendi)
先拉:git pull origin dev(拉最新的dev代码并与本地分支合并,避免冲突)------git pull命令的作用是:取回远程主机某个分支的更新,再与本地的指定分支合并。一句话总结git pull和git fetch的区别:git pull = git fetch + git merge
git add . git commit -m '' git push 提交到自己在远程仓库
git checkout dev 切换分支,切换后current branch:(dev)
git merge my-bendi 把我刚才改在东西合并过来
git push 把东西推送到远程dev分支 搞定
# 上传本地指定分支到远程仓库
git push [remote] [branch]
git cherry-pick 爽得一匹,如my-bendi 分支 修改东西,明天上线master分支,但是dev 不需要这个修改的东西,说白了,就是某个修改提交,其他分支想要就先切换到其他分支,然后git cherypick 提交的commitID
git reset 撤销 https://blog.csdn.net/qq_37284607/article/details/118822368
改动的文件 不想要 git restore . 我所改动的不要撤销改动
******************************************
******************************************
******************************************
记录一次撤销提交的情况(此时我改动的代码已提交至远程测试分支dev去了)
首先dev分支 git log
第一个箭头就是我提交的commit 我要回到第二个箭头的版本去,
来了:git reset --soft commitid 回退代码, 回退完成后代码相当于改动代码且git add . 到暂存区的状态,如图
然后 git reset HEAD filepathname (比如: git reset HEAD readme.md)来放弃指定文件的缓存,放弃所以的缓存可以使用 git reset HEAD . 命令。【也可以vscode 上操作】,操作之后如下图,代码回到了最初改动的状态(没有git add .的状态)
再然后 git checkout -- filepathname (比如: git checkout -- readme.md ,不要忘记中间的 “--” ,不写就成了检出分支了!!)。放弃所有的文件修改可以使用 git checkout . 命令【也可以vscode 上操作】。
搞定 git status 查看状态会提示你落后一个(我目前是一个,根据你的commit次数变化)commit ,把当前的版本强制提交到远端,git push origin 分支名 –-force,一定要加最后的--force 参数,否则会提交失败
最后去远程仓库看,会发现自己想要撤销的commit不见了,也就是成功了
总结:git 撤销
@1撤销本地代码修改(没有git add .之前)【ps:vscode直接撤销】可以使用 git checkout -- filepathname (比如: git checkout -- readme.md ,不要忘记中间的 “--” ,不写就成了检出分支了!!)。放弃所有的文件修改可以使用 git checkout . 命令。
@@撤销暂存区代码修改(已经使用git add .之后)【ps:vscode直接撤销】可以使用 git reset HEAD filepathname (比如: git reset HEAD readme.md)来放弃指定文件的缓存,放弃所以的缓存可以使用 git reset HEAD . 命令。
@3已经用 git commit 提交了代码,可以使用 git reset --hard HEAD^ 来回退到上一次commit的状态。此命令可以用来回退到任意版本:git reset --hard commitid
git log 先查看请交历史记录
@4 有一次用迈总的账号拉的代码(项目1)写东西,周一我用我的账号拉了新项目(项目2)的代码,然后 我提交上周写的东西(项目1),推的时候推不上去,显示的错误是我的名字,那是应为git add. git commmit 的时候用 的我的账号,so 把我的提交先撤回来(git reset HEAD^ 直接就这命令上面@3的没撤回来),改账号git config user.name xx git config user.email mai@xx.com 然后再add commit 在push
******************************************
******************************************
******************************************
vscode使用的时候,这个集合了git的 直接搞就是了
我想搭建一个基础架子就是框架,然后放到码云上去,其他人可以直接拉下来,然后开发,涉及到一个问题就是,其他人拉下来之后,这个拉下来的项目的git 提交地址还是我的马云的地址,
这里就得改一下git 提交地址
法1,找到项目根目录下的隐藏文件.git
随便找个东西打开改变这个url ok 搞定。
这是公司我随便建的一个项目,现在我来试一下,我先拉下来gs项目,然后改变这个url,我在码云上新建一个项目(空的)登陆是微信扫描登陆的哈,然后吧这个项目推送到码云看码云上面有没有,改了url
之后打开vscode直接推送就行了
我来试一试第二种方法
我新建一个码云项目,然后拉下来,这个项目是空的,我把别人的git项目拉下来,然后copy别人的项目到我自己建立的空项目下面,(.git文件不要他的),然后在我自己的项目里面去提交推送就行了
效果就全是修改的哟(因为没有嘛,新增也算修改瑟) 写信息,打勾勾,拉去,推送搞定
就搞定了哟
************这是使用react项目时使用git 它做了lint验证的,所以先要保证没错才能提交代码,不然
这种没有报错,只有警告的情况下,别人提交了代码我要拉它的代码,就报错了,搞不懂
很明显嘛 这个要先提交到暂存区才能拉啊,不然直接拉就覆盖了
拉代码的2中方式 ssh和https拉(这种要数用户名密码,我每周git 密码要更新so 每周都要输入密码烦人)
这里直接来把
1.生成 SSH 密钥
ssh-keygen -t rsa -b 4096 -C "your-email@example.com"
搞定后,ssh生成的秘钥在这,
2.添加公钥到 GitHub
把刚生成的SSH秘钥copy一下,然后打开 GitHub 网站,进入 Settings > SSH and GPG keys,点击 "New SSH key" 添加你的公钥。
git config --global user.name yourName
git config --global user.email yourEmail
3.搞定后直接拉代码
git clone ssh://git@gitlab********plaint.git
git clone https://gitla**********nt.git(这种是https的)