even

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

介绍:分布式版本管理系统 =》常见的版本控制系统: svn(集中式), git(分布式)

1、安装git版本可以参见官网的安装方式

在linux服务器上安装git

--安装相应的依赖环境
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker

--删除旧版本的git, yum会默认安装旧版本的git
yum remove git git 的linux环境上安装的镜像地址: https:
//mirrors.edge.kernel.org/pub/software/scm/git/ --下载镜像,这边以2.36.1版本为例 wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.36.1.tar.gz --解压镜像 cd git-2.36.1.tar.gz tar -zxvf git-2.36.1.tar.gz --安装git make configure ./configure --prefix=/usr/local/git --with-iconv=/usr/local/libiconv make all doc make install install-doc install-html echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc source /etc/bashrc

2、git在使用前需要做最小配置

# git 查看当前的git配置
git config # 可以选择查看哪个上下文件的配置
git config -l

# 在使用git的时候,需要做git用户名与邮箱的配置
git config user.name "your_name"; git config user.email "your_email@domain.com"

 3、git创建仓库

a、从远程克隆仓库(本地无代码):如果线上已有代码,只需要克隆线上的代码下来开发,那么可以采用这种方式

//先cd到指定的目录下
git clone https://gitee.com/xxxx.git

b、除了克隆仓库(前提本地无代码),也可以直接拉取代码

//先cd到指定的目录下
git init  //仓库初始化
git pull https://gitee.com/xxxx.git              //拉取代码
git remote add origin https://gitee.com/xxxx.git
git push -u origin master

c、如果线上是空仓库,需要把线下的代码填充到线上

//先cd到指定的目录下
git init
git add .                                      //把所有的内容添加到暂存区
git commit -m "first commit"                   //把暂存区的内容添加到工作区
git remote add origin https://gitee.com/xxxx.git
git push -u origin master

查看远程的仓库分支  git remote -v 

4、git 的常用基本操作

git 的结构分成左图的情况,三个分区:工作区,暂存区,版本库

//查看git当前的状态
git status

//把文件从工作区提交到暂存区
git add  文件名...  // 表示把指定的文件存放到暂存区
git add . //表示把当前所有工作区的文件全部添加到暂存区
git add -u //他仅监控已经被add的文件(即tracked file),他会将被修改或删除的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写)

git restore --staged 【文件名】  //表示把指定的文件名的从暂存区放回到工作区
git restore --staged .  //表示把所有的暂存区文件放回到工作区

git rm --cached 【文件名】  // 表示从暂存区删除指定的文件夹,如果是新增的文件,那么会放回到工作区, 如果是已提交的,那么会在暂存区生成一个删除的记录供提交
git rm --cached -r .  // 表示删除当前在暂存区的所有文件

//进行文件重命名
git mv 需要更改的文件名  新的文件名   //这个执行后就自动add到暂存区,可以直接commit

//把文件从暂存区提交
git commit -m "变更的备注或理由方便后面查看"
//把git add .与git commit -m 合并后
git commit -am "这个是合并后的效果"
//把文件推送到版本库中 git push //查看提交的信息 git log

 删除文件的方式

git rm <filename> //表示删除了指定的文件,并且把删除提交到了暂存区

rm <filename>  // 删除了指定的文件,但是没有把删除提交到暂存区

git reset HEAD <filename>  // 表示把指定的文件从暂存区恢复到工作区操作, 如果没有声明指定文件,那么则是全部文件从暂存区恢复到工作区的操作, 这里的HEAD是指向当前的分支

git checkout -- <filename> // 表示撤消对指定文件的修改

git checkout -- .  // 表示撤消对所有文件的修改

git checkout <commit_id> // 表示切换到指定的提交的分支上

 5、git查看历史版本

//查看历史版本
git log
//简洁的查看历史版本 git log --oneline

//log 以图形化的格式显示
git log --graph
//如果要查看最近的2条记录可以使用 git log -n2 git log -n2 --oneline //简洁的显示
//
查看所有分支的提交 git log --all
//查看所有分支的提交并以图表的形式展示 git log --all --graph
//查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作) git reflog
//根据git日志查找对应的提交内容 git log --grep="fix"

6、分支操作

git checkout -b <branchname>  [remote] [branch]  // 表示创建新分支,remote表示远程的源, branch表示该分支需要建立在远程的指定的分支上

git checout -  // 表示切换到master分支

git checkout
<branchname> // 表示切换当前分支到指定的分支上,前提是该分支存在 git branch -d <branchname> // 删除分支,但是如果该分支上有未处理的数据,那么会删除失败 git branch -D <branchname> // 强制删除分支,并且也会删除上面未提交的数据 git merge <branchname> // 表示把指定的分支合并到当前分支上

// 通常来讲git merge 分支的时候,默认的模式是fast-forward模式,比如master合并aaa分支后,相当于把master的指针指向了aaa的提交,如果采用的是--no-ff模式如 git merge aaa --no-ff
这时会在log那边重新生成一条合并记录,即使是删除分支后,那么这个记录还是存在如下图
git branch [-a] // 查看分支

 

 7、git回退版本

// 回退到上一版本
git reset --hard HEAD^   // 一个^表示前面一个版本, ^^表示前面两个版本,以此类推

git reset --hard HEAD~1  // 数字表示前面的版本,1表示前面一个版本,以此类推

// 回退到指定的版本
git reset --hard commit_id  // commit可以根据git log进行查看,可以往前回退,往后回退,如果需要往前回退,可以用git reflog查看操作日志

 8、git变基

 

 

 

 

 

 

 

 

 

 7、检看之前的版本

//查看之前的版本
git log --oneline
//切到指定的版本查看,这时不会影响当前的项目状态
git checkout <commit>
//查看完后切换到当前分支
git checkout master
//但是注意如果使用以下命令就会更改当前的项目状态
git checkout <commit><file> 比如 git checkout 1d746c3 index.html
//这时会切换到主分支,并且当前状态已更改

8、回滚错误的修改

//恢复git指定修改的文件
git checkout <file>
//恢复所有修改的文件
git checkout .
//把暂存区的内容取消到未暂存区
git reset <file>
//把所有暂存区的内容取消到未暂存区
git reset

//把提交区的撤消, 用revert进行撤消,但是撤消后会有撤消记录,需要提交,内容不会返回工作区
git revert HEAD 
//用reset进行撤消,不会产生提交记录,并且内容不会返回工作区
git reset --hard <commit>

//把未commit状态的内容返回到工作区
git reset --soft HEAD~

 9、git合并提交

# 编辑 hello.py 和 main.py
git add hello.py
git commit

# 意识到你忘记添加 main.py 的更改
git add main.py
git commit --amend --no-edit

 10、rebase的使用

git checkout -b fix origin/master
//编辑代码有两次提交
git rebase -i HEAD~2  //合并提交 --- 2表示合并两个
git rebase master---->解决冲突--->git rebase --continue
git checkout master
git merge fix
git push

注意:这样的好处是在于多次提交合并容易产生多次冲突,rebase -i后进行统一,然后解决一次即可

 

 

 

 

 

 

 

 

 

 

 

 

 

  

posted on 2019-08-25 00:56  even_blogs  阅读(193)  评论(0编辑  收藏  举报