git学习网站
一、安装Git
二、基础操作
1、创建git仓库
新建一个文件夹,在该文件夹中右键选择git bash,输入git init
创建仓库,会有一个隐藏的文件.git文件,是看不到的。(Git命令必须在Git仓库目录内执行,git init除外,在仓库目录外执行是没有意义的。)
2、加入文件
之后可以将你想要修改的文件放入建立的文件夹中,输入git add 文件名
将文件添加到git仓库中。再使用git commit -m "文件修改说明"
把文件提交到git仓库。
为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件再使用commit提交命令。
3、修改文件
git status
命令可以让我们时刻掌握工作区当前的状态,可以告诉我们哪个文件被修改了。git diff 文件名
查看工作区和暂存区差异,可以告诉我们文件修改了什么内容。修改完后提交文件步骤与2相同,都是先add再commit.git log
显示从最近到最远的提交日志- 让文件退回到以前的版本:在Git中,用HEAD表示当前版本,上一个版本就是HEAD^, 上上一个版本就是HEAD^^。利用
git reset --hard HEAD^
可以将HEAD指针指向上一个版本,这样文件内容就回退到上一版本了。git revert
- 让文件退回版本后又回到未来的版本:因为回到未来版本需要commit id,所以可以利用
git reflog
(用来记录你的每一次命令)找到命令记录,然后通过$ git reset --hard 1094a
回到未来的版本,其中1094a是commit id的前5位。 git checkout -- 文件名
把该文件所在工作区的修改全部撤销,就是让这个文件回到最近一次git commit
或git add
时的状态。其实是用版本库里的版本替换工作区的版本。
总结:
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD ,就回到了场景1,第二步按场景1操作。
- 删除文件:首先直接在工作区中删除文件或者利用
rm 文件名
删除文件。然后从版本库中删除该文件,利用git rm 文件名
和git commit
彻底删除该文件。如果是误删,可以利用git checkout -- 文件名
进行恢复。
Git管理的文件分为:工作区,版本库,版本库又分为暂存区stage和暂存区分支master(仓库)
工作区>>>>暂存区>>>>仓库
git add把文件从工作区>>>>暂存区,git commit把文件从暂存区>>>>仓库,
git diff查看工作区和暂存区差异,
git diff --cached查看暂存区和仓库差异,
git diff HEAD 查看工作区和仓库的差异,
git add的反向命令git checkout,撤销工作区修改,即把暂存区最新版本转移到工作区,
git commit的反向命令git reset HEAD,就是把仓库最新版本转移到暂存区
4、远程仓库
通过SSH连接远程仓库:
步骤:
- 本地电脑生成ssh秘钥——公钥私钥
ssh-keygen -t rsa -C "youreamil"
一路按回车,最后可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥。
- 复制公钥 id_rsa.pub内容与git仓库设置中绑定ssh key
5、分支管理
分支对于团队来说作用太大了。比如说一个项目现在是1.0版,那么开发团队可能要同时进行1.1版和2.0版的开发,这样代码就会出现较大分歧。这时候就需要用到分支了,不同的任务组在不同的分支上开发,互相之间不会影响。再比如说,需要向项目中添加一个新功能,一般的团队都不会直接在主分支上修改,都会新建一个分支,在上面更改代码。这样做的好处就是保证主线代码的完整性和可用性,也就是说,主线上(master)都是稳定的代码,可以直接拿来发布的。
master是指向提交的,HEAD指向的就是当前分支。dev指向新创建的分支。假如我们在dev上的工作完成了,就可以把dev合并到master上(就是直接把master指向dev的当前提交)。
- 创建并切换分支(这里的分支名称为dev)
$ git branch dev 创建分支
$ git checkout dev 切换分支
$ git switch dev 切换分支(新版本才有)
$ git checkout -b dev相当于创建并切换分支
$ git branch 命令会列出所有分支,当前分支前面会标一个*号。
$ git branch -f master HEAD^或者HEAD~2使master指向HEAD指向的地方
- 在当前分支修改文件
$ git add 文件名
$ git commit -m "branch test"
- 把dev分支的工作成果合并到master分支上
// 1 切换到要保留的分支——这里是master
git checkout master
// 2 合并掉分支dev
git merge dev
第二种合并分支的方法是 git rebase。Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。
Rebase 的优势就是可以创造更线性的提交历史,这听上去有些难以理解。如果只允许使用 Rebase 的话,代码库的提交历史将会变得异常清晰。
- 删除分支
git branch -d dev
- 当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
用git log --graph
命令可以看到分支合并图。
例如以下图片显示的冲突(主分支和分支同时修改文件的同一个地方再合并会发生错误):
解决冲突后的情况如下:
合并分支时,如果可能,Git会用Fast forward
模式,但这种模式下,删除分支后,会丢掉分支信息。合并分支时,加上--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
我们想将一个 分支上的工作复制到 另外一个 分支上。
git cherry-pick 名字(这些提交记录的哈希值,可以有多个)
git fetch
完成了仅有的但是很重要的两步:
从远程仓库下载本地仓库中缺失的提交记录
更新远程分支指针(如 o/master)
git fetch 实际上将本地仓库中的远程分支更新成了远程仓库相应分支最新的状态。
git pull
就是 git fetch 和 git merge 的缩写(即先从远程下载本地没有的提交记录,再将其与本地记录进行合并)。从远程服务器获取到一个branch分支的更新到本地,并更新本地库,叫做pull.
把本地库的内容推送到远程,用git push
命令
例子:从github上新建一个仓库,在vscode项目文件夹的终端命令中git clone
+新建仓库地址。将文件拷贝到下载的文件中,随后git add
. 然后git commit -m " 项目初始化"
,git push
之后,登录github.
如果不想拷贝,想直接把本地库的代码上传到github,则 git remote add origin 仓库地址
,随后git push -u origin master
第一次推送master分支的所有内容;此后,每次本地提交后,只要有必要,就可以使用命令git push origin master
推送最新修改;
git init
git add .
git commit -m "My Vue Demo"
git remote add origin https://github.com/JoshuaTian/LearnVue.git
git push -u origin master
6、gitee的使用
转自https://www.cnblogs.com/yiven/p/8465054.html
--------------------------------- -git日常翻车小记分界线
呜呜呜,我走了多少弯路才成功哦,有多少次我误删自己的文件把自己气炸了。记录一下在vscode中的代码传到gitee.
先建立一个空的文件夹,在该文件夹里运行git bash命令。之后输入git clone 路径,从vscode中打开该文件,在左下角切换想要修改的分支,之后修改文件,在左边竖栏里的点击修改文件的图标,点击勾之后输入git push命令。
我又来了,刚刚把我的分支合并到主分支的时候因为有冲突,不能直接Pull request直接合并,需要手动合并,git checkout master,git pull origin 路径 分支名,解决好冲突后,git commit -m"",git push origin master,解决冲突的时候注意了啊,还是需要你自己手动改的,不要一直选择当前更改啥的,把别人东西删了你才会后悔哦。😦😦😦
------------------------------更新线------------------------------------------------------------------------
代码回溯、版本切换、多人协作、远程备份
1、git简介
git仓库分为两种:本地仓库(开发人员自己电脑上的git仓库)、远程仓库(远程服务器上的git仓库)。
2、git代码托管服务
-
常用的git代码托管服务
-
使用码云代码托管服务
3、git常用命令 -
git全局设置
-
获取git仓库
-
工作区、暂存区、版本库的概念
-
git工作区中文件的状态
-
本地仓库操作
通过git log获取版本号,提交代码后再修改需要重新加入暂存区。 -
远程仓库操作
注:码云上远程仓库的成员才有权限推送代码。
从本地通过git clone克隆远程仓库到本地,然后进行修改后git add *,git commit -m “”,git push origin master(推送到远程仓库主分支)
总结:
本地仓库的创建方式不同,操作也会有所不同:
1、如果本地仓库是自行创建。即通过git init 创建,则在和远程仓库连接后需要通过git pull 仓库名 分支名 --allow-unrelated-histories
拉取远程仓库的代码,但是如果本地仓库直接克隆远程仓库的话就可以直接使用git pull origin master
拉取远程仓库的代码。(ps:本地还没Pull拉取就进行Push推送操作,Push推送会失败,表示会与远程库版本冲突)
2、文件都是先提交到本地仓库后才可以提交到远程仓库。所以提交代码主要有三个步骤:git add *,git commit -m “”,git push origin master(推送到远程仓库主分支) -
分支操作
总结:不同的分支可以有不同的内容,在本地仓库中创建分支git branch b1
后再推送到远程仓库git push origin b1
,切换到分支上就可以在分支上进行修改文件的操作,最后再切换到master上进行分支的合并操作,即b1的内容可以合并到master上。
合并分支中途问题的解决:
冲突问题出现的场景:多个分支同时修改同一个文件,这时候会发生冲突,需要手动解决冲突后再提交到远程仓库中。
在两个分支下修改同一文件。
发生冲突后打开master节点上的b1文件手动解决冲突,保留需要修改的部分后进行推送。
- 标签操作
在idea中连接远程仓库,需要先将已有的文件add和commit到本地仓库中(文件名红色-》绿色-》白色),然后再连接远程仓库。