git的使用

https://www.liaoxuefeng.com/wiki/896043488029600

把一个文件放到Git仓库只需要两步。

//第一步,用命令git add告诉Git,把文件添加到仓库:
$ git add .
//第二步,用命令git commit告诉Git,把文件提交到仓库
$ git commit -m "更新"

版本回退

//这里有修改过几个版本的例子
//版本一
           <div>
               try   //commit -m finish
           </div>
//版本二
           <div>
               try
               我修改过了   //commit -m "修改"
           </div>
//版本三
           <div>
               try
               我修改过了
               我又改过了    //commit -m "再次修改"
           </div>

git log命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是"再次修改",
上一次是"修改",最早的一次是"finish",每提交一个新版本,实际上Git就会把它们自动串成一条时间线。如果使用可视化工具查看Git历史,就可以更清楚地看到提交历史的时间线:


c1c0dc26ab70dfe623f8dbbc2a9b120.png

如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:

0a828bd00c35027434684b239aff3b6.png

看到的一大串类似f94f3...的是commit id(版本号)
好了,现在我们启动时光穿梭机,准备把change.html回退到上一个版本,也就是commit提交说明 "修改" 的那个版本,怎么做呢?
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交f94f3...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。
在,我们要把当前版本append GPL回退到上一个版本"修改",就可以使用git reset命令:
b58141f0afea44f6ffba077686f7f33.png

//回退到这个版本了
            <div>
                try
                我修改过了
            </div>

还可以继续回退到上一个版本 "再次修改",不过且慢,然我们用git log再看看现在版本库的状态:


01245d6209106fcf69b78bf94eb2bfa.png

最新的那个版本append GPL已经看不到了!好比你从21世纪坐时光穿梭机来到了19世纪,想再回去已经回不去了,肿么办?
办法其实还是有的,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个 "再次修改"的commit id是f94f3...,于是就可以指定回到未来的某个版本


7926cf9e4eb53fbed78a287fe70ed4e.png

版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。
再小心翼翼地看看change.html的内容:
//指定回到未来的某个版本
            <div>
                try
                我修改过了
                我又改过了
            </div>

现在,你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?
Git提供了一个命令git reflog用来记录你的每一次命令:


95ee576326ebef5315e971720f7f427.png

从输出可知, "再次修改"版本的commit id是f94f351,现在,你又可以乘坐时光机回到未来了。
版本回退小结:
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

工作区和暂存区

工作区(Working Directory)
就是你在电脑里能看到的目录,
版本库(Repository)
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。


059c927ae7340c6e9741b9f2afd28f6.png

前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
俗话说,实践出真知。现在,我们再练习一遍,先对chang.html做个修改,比如加上一行内容:

            <div>
                try
                我修改过了
                我又改过了
                我再改过了
            </div>

然后,在工作区新增一个try.html(内容随便写)。
先用git status查看一下状态:


18e5f07396868fc5a62cf43e01e5f8f.png

Git非常清楚地告诉我们对chang.html被修改了,而try.html还从来没有被添加过,所以它的状态是Untracked(未跟踪),表示还没add。
现在,暂存区的状态就变成这样了:


0.jpg

现在,使用命令git add,把chang.html和try.html都添加后,用git status再查看一下:


4978ce39f2cf9c3927cc66f6b2d0645.png

所以,git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,然后$ git commit -m "增加了try.html" 就可以一次性把暂存区的所有修改提交到分支。
现在版本库变成了这样,暂存区就没有任何内容了:


0.jpg

管理修改

现在,假定你已经完全掌握了暂存区的概念。下面,我们要讨论的就是,为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件。
你会问,什么是修改?比如你新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改,甚至创建一个新文件,也算一个修改。
为什么说Git管理的是修改,而不是文件呢?我们还是做实验。第一步,对chang.html做一个修改,比如加一行内容:

            <div>
                try
                我修改过了
                我又改过了
                我再改过了
                我增加了一行
            </div>

然后,添加:

$ git add readme.txt
$ git status

然后,再修改chang.html:

            <div>
                try
                我修改过了
                我又改过了
                我再改过了
                我增加了一行
                我再再改过了
            </div>

提交:commit
提交后,再看看状态:
git status
咦,怎么第二次的修改没有被提交?
第一次修改 -> git add -> 第二次修改 -> git commit
小结
现在,你又理解了Git是如何跟踪修改的,每次修改,如果不用git add到暂存区,那就不会加入到commit中。

撤销修改

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file(文件名)

场景2:现在假定是凌晨3点,你不但写了一些胡话,还git add到暂存区了:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,庆幸的是,在commit之前,你发现了这个问题。用git status查看一下,修改只是添加到了暂存区,还没有提交,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

删除文件

在Git中,删除也是一个修改操作,我们实战一下,先添加一个新文件del.html到Git并且提交:

$ git add test.txt
$ git commit -m "add test.txt"

//另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
$ git checkout -- test.txt
命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。

git分支
git branch 查看当前分支
在命令行创建分支:
git branch dev创建分支,dev为创建的分支名
git checkout dev 切换分支,dev为分支名
删除分支:git branch -d dev dev为分支名
不能删除当前分支,需要切换到其他分支,再删除

创建分支:切换分支 :往切换到的分支添加内容 然后git add .
git commit -m 123
git pull
git push --set-upstream origin test(分支名字),第一次push一定要添加 --set-upstream origin test(分支名字),是为了关联该分支,然后添加的内容就是push到test这个分支了。

也可以创建分支 ,切换分支 ,
然后git add .
git commit -m 123
git pull
git push --set-upstream origin test(分支名字),
下次切换到该分支,再添加内容 ,然后四步骤也行

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

码云创建分支:


fee1de78acb2eb5d570e669d9a14fd3.png

选择分支,然后clone

直接指定clone某个分支:

git clone -b xxx .git地址 xxx为分支

克隆后把它放到新创建的分支(注意克隆之后记得退出git,重新进入根目录打开git在运行命令):
下面这样就把克隆下来的项目放到自己新创建的分支了


e8c94d9fb2a234e82fb21b7c63f5249.png

第二:克隆之后创建自己的分支,然后切换到自己的分支,现在我就可以通过git pull origin 拉远程分支的代码到自己的分支了。


8c25079f293a09a10a3d4c6a648c7e1.png

8fc3b541e3de32ee7dec7383a5aeb1b.png

创建的第一次push需要git push --set-upstream origin dev-zhang关联自己的分支

查看pull远程分支:

$ git branch -a  查看远程分支
$ git pull origin dev 拉远程分支代码 dev为分支名
如果报这个错fatal: Authentication failed for 'http://git.jidiankj.cn/ydk/ydk-manager.git/'
在 git 输入 git config --system --unset credential.helper
会弹框输入gitlab账户密码 $ git pull origin dev
$ git add .
$ git commit -m 123

生成密钥:
git config --global user.name
git config --global user.email
生成密钥:
cd ~/.ssh/
ssh-keygen -t rsa -C "xx@qq.com"(邮箱是绑定gitlap账号的邮箱)
找到.shh文件,用记事本打开id_rsa.pub文件
然后点击生成密钥:把id_rsa.pub的文字复制进去大的框,标题:随便(需要登录gitlap)
然后再clone,如果报这个错fatal: Authentication failed for 'http://git.jidiankj.cn/ydk/ydk-manager.git/'
在 git 输入 git config --system --unset credential.helper
再次clone 会弹框输入gitlab账户密码

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

pull远程最新代码到自己分支:
最好先保存当前自己的代码先提交到自己的远程仓库,
回头如果有问题,你还能回滚
然后取拉取dev的

$git pull origin dev

拉远程分支代码 dev为分支名(之前$ git branch -a 查看远程分支 确定是自己分支的代码)
产生冲突:


c90ff9c5ddb052cf218a402a1d4f0e8.png

解决冲突:
可以输入git status 可以告诉我们冲突的文件
在vscode提示,把一些不需要的删掉。
确定没问题之后,
再推到自己的分支,保证自己的代码是最新的,

最好每天在自己分支拉一次dev的代码(自己的最新的代码推到远程库之前再拉,报错还能回退),保证自己分支的代码是最新的。解决冲突之后再push到自己的远程库
如果需要合并的话,切换到dev分支,git merge zhang 把自己的代码合并到dev 然后提交上去 再切回来自己的分支,
更好的解决方法:

查下当前分支,做完功能先把自己的代码push到自己的远程库,然后在自己分支合并dev,没问题后提交到自己的远程库,然后切换到dev拉自己分支(git pull origin dev),没问题再推上去(add commit 四步走)。

创建新的分支,拉取master去改代码,用来发布另一套版本
1、如果在自己本地已经存在主干代码,直接创建切换分支 git checkout -b 分支名字
2、再切换到主干更新代码 git pull origin master
3、再切换到自己新创建的的分支,git pull origin master ,
4、git add .
git commit -m ""
git push --set-upstream origin test(分支名字),第一次push一定要添加 --set-upstream origin test(分支名字),是为了关联该分支,然后添加的内容就是push到test这个分支了。

第二种情况
就是别人创建新的分支,用的这个新的分支去改代码用来发布另一套版本
1、直接创建切换分支 git checkout -b 分支名字
2、然后把别人创建新的分支给拉取到本地以及关联 git fetch origin dev1.1-0604:dev1.1-0604
3、再切换到该分支拉取代码,git pull origin dev1.1-0604
4、切回来拉取 dev1.1-0604代码提交即可
版本回退:
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。

穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

(HEAD detached at 4.1.7)分支游离状态

切回 git checkout master
git pull origin
git checkout feature/zsy-copy/1003 4.1.7(在4.1.7基础上创造feature/zsy-copy/1003分支)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容