代码改变世界

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的)