赞
踩
(一)svn 集中式版本管理系统;
(二)git分布式版本管理:工作区、暂存区、历史区
(一)SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器,集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。
(二)Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网,因为版本都在自己电脑上,协同的方法是这样的:
比如自己在电脑上改了A文件,其他人也在电脑上改了A文件,这时候,你们两之间只需要吧各自的修改推送给对方,就可以互相看到对方的修改,Git可以直接看到更新了哪些代码和文件
卸载: 直接反安装即可,然后清理环境变量;安装: 无脑下一步即可!安装完毕就可以使用了
查看配置 git config -l
#查看系统config
git config --system --list
#查看当前用户(global)配置
git config --global --list
1)、Git\etc\gitconfig :Git 安装目录下的 gitconfig --system 系统级
2)、C:\Users\Administrator\ .gitconfig 只适用于当前登录用户的配置 --global 全局
git init
#个人名称
git config --global user.name 'xxx'
#个人邮箱
git config --global user.email 'xxx@xxx.com'
git add . #提交全部文件
git add -A #提交全部文件
git add <files> #指定提交的文件
-m
的选项,就会进入 vim
编辑器进行相关信息编写git commit -m '提交的相关信息'
注: 红色代表在工作区 绿色代表在暂存区
git log #查看详细的提交信息
git log --oneline #查看精简的历史信息
git reset --hard 版本标识符
其他命令
①查看文件内容:cat 1.txt
②新建:touch 1.txt
③查看当前状态:git status
④给文件添加内容vim 1.txt
⑤回滚:git restore --staged x
// 首先切换到master分支上
git checkout master
// 如果是多人开发的话 需要把远程master上的代码pull下来
git pull origin master
// 然后我们把dev分支的代码合并到master上
git merge dev
//git status
On branch master Your branch is ahead of 'origin/master' by 12 commits. (use "git push" to publish your >local commits) nothing to
commit, working tree clean
//上面的意思就是你有12个commit,需要push到远程master上
// 最后执行下面提交命令
git push origin master
比如 feature 分支上的commit 82ecb31非常重要,它含有一个bug的修改,或其他人想访问的内容。
无论什么原因,你现在只需要将82ecb31合并到master,而不合并feature上的其他commits;
git checkout master
git cherry-pick 82ecb31
git的工作流程一般是这样的:
1、在工作目录中添加、修改文件;
2、将需要进行版本管理的文件放入暂存区域;
3、将暂存区域的文件提交到git仓库。
因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)
日常使用流程:
文件的四种状态:
版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。
Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified
Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 !
Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
#查看指定文件状态
git status [filename]
#查看所有文件状态
git status
# git add . 添加所有文件到暂存区
# git commit -m "消息内容" 提交暂存区中的内容到本地仓库 -m 提交信息
设置本机绑定SSH公钥,实现免密码登录!(免密码登录,这一步挺重要的,码云是远程仓库,我们是平时工作在本地仓库!)
ssh-keygen -t rsa
注意:添加本地项目与远程项目关联使用git remote add “origin” (远程库的ssh协议)
若没有成功=>解决:
忽略文件
有些时候我们不想把某些文件纳入到版本控制中,比如数据库文件,临时文件、设计文件等
在主目录下建立".gitignore"文件,此文件有如下规则:
1、创建仓库
2、提交远程仓库【第一次提交需认证】
一定要记得从历史区提交
git push 远程仓库的地址 master
注意: 提交到远程的时候,先将本地的代码提交到本地地历史区
3、从远程拉取【远程同步代码】
git pull 远程仓库的地址 master
问题:在第二次提交的时候,可能出现下图问题:
原因分析:
通过查看提示信息,我发现,是因为本地仓库和远程仓库的文件不一致所致,也就是GitHub允许本地有的东西,远程仓库里没有
解决方案:
在push提交之前先同步一下本地仓库与远程仓库的文件,使用以下命令:
git pull --rebase 远程仓库地址 master
成功后提示如下图:
设置秘钥:
ssh-keygen -t rsa -b 2048 -C “地址”
接下来就可以继续push自己的代码,进行提交了
4、条件东西到别人仓库(提交作业)
①首先打开别人的仓库找到对应的—点击右边的Fork拉取–然后跳转到自己仓库–
②随便找个文件夹打开git–输入 git clone 远程地址 master—克隆完成后进去创建自己的文件–依次开始提交暂存区-历史区-git pull 远程仓库的地址 master–自己仓库有了
③提交到老师那:打开自己的GitHub—按下Pull requests–点击右边的新建–点击右边的create pull request—进去继续点create pull request
git clone https://github.com/"you"/"you repositries"
当你某个改动提交到本地仓库之后,也就是 commit 之后,这个时候你想撤回来,再改点其他的,那么就可以直接使用 git reset HEAD^
。这个时候你会惊奇的发现,你上一版的代码改动,全部变成了未被提交到暂存区的状态,这个时候你再改改代码,然后再提交到暂存区,然后一起再 commit 就可满足你的需求了。
除了这种基础用法,我们还可以配合其他命令操作一下。
某一天你老板跟你说,昨天新加的功能不要了,给我切回之前的版本看看效果,那么这个时候,你可能就需要将工作区的代码回滚到上一个 commit 版本了,操作也十分简单:
git log
查看上一个 commit 记录,并复制 commitId
git reset --hard commitId
直接回滚。
如果某一个你开发需求正开心呢,突然发现,自己以前改的某个东西怎么不见了,你想起来好像是某次合并,没注意被其他提交冲掉了,你心一想,完了,写了那么多,怎么办?很简单,回到有这份代码的那个版本就好了(前提你提交过到本地仓库)。
假设我们有这么两个提交记录,我们需要下面那个 365 开头 commitId 的代码:
commit e62b559633387ab3a5324ead416f09bf347d8e4a (HEAD -> master)
Author: xiaohang.lin <xiaohang.lin@alibaba-inc.com>
Date: Sun Aug 14 18:08:56 2022 +0800
merge
commit 36577ea21d79350845f104eee8ae3e740f19e038 (origin/master, origin/HEAD)
Author: 陌小路 <44311619+STDSuperman@users.noreply.github.com>
Date: Sun Aug 14 15:57:34 2022 +0800
Update README.md
1、抢救第一步 git log 找到有你这个代码的那个 commitId(也就是 36577ea21d79350845f104eee8ae3e740f19e038)
2、抢救第二步 git reset --hard commitId
3、第三步:Ctrl + c 你的目标代码
这个时候你想把复制好的代码写回去,该怎么办呢,你可能会再 git log 看一下我们 reset 之前的 commitId,你会发现,完了,之前的 commitId 都没了,只有这个 365 了。
commit 36577ea21d79350845f104eee8ae3e740f19e038 (origin/master, origin/HEAD)
Author: 陌小路 <44311619+STDSuperman@users.noreply.github.com>
Date: Sun Aug 14 15:57:34 2022 +0800
Update README.md
不要慌,请记住一句话,只要你不删你本地的 .git 仓库,你都能找回以前所有的提交。
git log 看不到的话,我们就可以祭出我们的绝招了:git reflog
36577ea (HEAD -> master, origin/master, origin/HEAD) HEAD@{0}: reset: moving to 36577ea21d79350845f104eee8ae3e740f19e038
e62b559 HEAD@{1}: reset: moving to e62b559633387ab3a5324ead416f09bf347d8e4a
这里我们可以看到两行记录,一个是我们执行 reset 到 365 的记录,另一条不知道是啥,不重要,我们想回到我们刚刚 reset 之前的状态也很简单,直接复制它上一次的变动也就是这个 e62b559,然后执行 git reset --hard e62b559
,然后你会惊奇的发现,你之前的代码又回来了。
接下来把你以前版本的代码,再 Ctrl + v 放进来就完成了。
(一)先git clone 项目地址【把项目拉到本地】
(二)git add .
(三)git commit -m ‘本次提交的注释’
(四)git push【项目内容被成功推到码云上】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。