文章目录
版本控制
版本控制是一种记录一个或若干文件内容的变化,以便将来查阅特定版本修订情况的系统
作用
备份文件、记录历史、时光机、多端共享(百度云)、团队协作
原始版本控制系统
本地版本控制系统(文件系统、RCS)
集中化版本控制系统(SVN、CVS)
优点:客户端盛磁盘空间、权限控制方便
缺点:安全性低
分布式版本控制系统(Git、Mercurial)
优点:弥补了集中化版本控制系统的缺点
缺点:增加了本地磁盘空间的占用、代码保密性差,不方便做权限控制
Git基本操作
创建项目
克隆项目:把项目从server克隆到本地
$ git clone https://gitee.com/ch-ambition/Python-01.git
Cloning into ‘Python-01’…
进入仓库(所有仓库的操作都需要先进入仓库)
陈慧@LAPTOP-1U92OFM7 MINGW64 ~/Python-01 (master)
$ cd Python-01
在本地拉取服务器最新信息
$ git pull
或
$ git fetch
$ git merge
本地修改同步到网页
本地创建文件
$ vim c.txt
标记文件为待提交文件
$ git add c.txt
将文件提交到本地
配置用户信息
$ git config --global user.email “1282518349@qq.com”
$ git config --global user.name “旋风小甜甜”
$ git commit
提交时一定要写备注信息
提交到远程仓库
$ git push
Git中文件的三种状态
已修改(modified)
已暂存(staged)
已提交(committed)
删除文件并同步到远程仓库
$ git rm a.txt
$ git commit -m “delete”
$ git push
通配符
git add *.txt(把所有扩展名为txt的都add)
gia add . (标记所有有变化的文件为暂存态)
拉取远程仓库信息
添加远程仓库
$ git remote add homework https://gitee.com/it_technology/python_201901_fulltime.git
查看所有远程仓库
$ git remote -v
homework https://gitee.com/it_technology/python_201901_fulltime.git (fetch)
homework https://gitee.com/it_technology/python_201901_fulltime.git (push)
origin https://gitee.com/ch-ambition/python_201901_fulltime.git (fetch)
origin https://gitee.com/ch-ambition/python_201901_fulltime.git (push)
从指定远程仓库拉取信息
$ git pull homework master
删除仓库
git remote remove 仓库名
master 项目初始化的默认分支
创建分支
git branch 新分支名 原分支名
查看分支,当前分支前标*
git branch
查看历史
git log
切换分支
git checkout 分支名
创建并切换分支
git checkout -b 分支名
合并分支
git merge 分支名
删除未合并的分支
git branch -D 分支名
删除合并了的分支
git branch -d 分支名
在push代码时,出现“git master branch has no upstream branch”
问题的原因是没有将本地的分支与远程仓库的分支进行关联
解决:git push --set-upstream origin dev(分支名)
不能在要删除的分支下删除此分支
提交作业
从IT技术 / python201901全日上拉取作业内容
进入当天的作业文件夹
$ cd 20190227-day2-git及python起步/
创建以自己名字命名的文件夹
$ mkdir 陈慧
进入自己的文件夹创建一个作业文档并编辑作业
$ cd 陈慧/
$ vim text.txt
退出到作业文件夹
$ cd …
上传陈慧文件夹
$ git add 陈慧/
$ git commit
$ git push
Git 常用命令
git init
git clone
git remote add origin ***.git
git push -u origin master
- 推送到远程仓库的dev分支:
git push origin dev
git log
git log --graph --pretty=oneline --abbrev-commit
git status
git diff
git add *
git commit -m "message"
- commit之后又改了一个小bug,但是又不想增加一个commit,可以用:
git commit --amend --no-edit
,直接将改动添加到上一次的commit中 git push
git pull
touch .gitignore
Git 标签管理
- 首先切换到需要打标签的分支上,然后使用
git tag v1.0
就可以在当前commit打上v1.0的标签 git tag v1.0 commitID
对特定commit打标签- 打标签时加上message:
git tag -a <tagname> -m "message"
git tag
查看所有标签git show [tagname]
查看标签详细信息git push origin <tagname>
可以推送一个本地标签到远程仓库git push origin --tags
可以推送全部未推送过的本地标签git tag -d <tagname>
可以删除一个本地标签git push origin :refs/tags/<tagname>
可以删除一个远程标签(先从本地删除)
Git 撤销与回滚
- 暂存区:
git add
之后commit之前存在的区域;工作区:git commit
之后存在的区域;远程仓库:git push
之后; - 作了修改,但还没
git add
,撤销到上一次提交:git checkout -f -- filename
;git checkout -f -- .
- 作了修改,并且已经
git add
,但还没git commit
:- 先将暂存区的修改撤销:
git reset HEAD filename
/git reset HEAD
;此时修改只存在于工作区,变为了 “unstaged changes”; - 再利用上面的checkout命令从工作区撤销修改
- 先将暂存区的修改撤销:
git add
之后,作了修改,想丢弃这次修改:git checkout -f --filename
会回到最近一次git add
- 作了修改,并且已经
git commit
了,想撤销这次的修改:git revert commitID
. 其实,git revert
可以用来撤销任意一次的修改,不一定要是最近一次git reset --hard commitID
/git reset --hard HEAD^
(HEAD表示当前版本,几个^表示倒数第几个版本,倒数第100个版本可以用HEAD~100);参数--hard
:强制将暂存区和工作区都同步到指定的版本git reset
和git revert
的区别是:reset是用来回滚的,将HEAD的指针指向了想要回滚的版本,作为最新的版本,而后面的版本也都没有了;而revert只是用来撤销某一次更改,对之后的更改并没有影响- 然后再用
git push -f
提交到远程仓库
Git 分支管理
-
创建分支:
git branch test
-
切换分支:
git checkout test
-
创建并切换分支:
git checkout -b test
-
将test分支的更改合并到master分支:先在test分支上commit、push,再:
git checkout master
;git merge test
-
如果合并时产生冲突:先手动解决冲突,再合并
-
删除分支:
git branch -d test
-
git stash
- 如果当前分支还有任务没有做完,也不想提交,但此时需要切换或者创建其它分支,就可以使用stash将当前分支的所有修改(包括暂存区)先储藏起来;然后就可以切换到其它分支
- 在其它分支工作完成之后,首先切换回原来的分支,然后使用
git stash list
命令查看 - 可以使用
git stash apply <stash number>
恢复之前储藏的工作现场,再使用git stash drop <stash number>
删除掉储藏的内容 - 也可以直接用
git stash pop
恢复并删除内容
-
如果在其它分支上做了一个修改(比如修复了一个bug,这次修改有一个commitID),想要将这次修改应用到当前分支上,可以使用:
git cherry-pick commitID
,可以复制一个特定的提交到当前分支Git
-
在github上创建一个仓库,后期所有代码都上传到这里
-
克隆仓库到本地,做好相关配置
-
基于master新建一个分支:
v0.1-django-start
-
在v0.1分支创建虚拟环境
- $ python -m venv venv
- $ source venv/Scripts/
- pip install django==1.11.20
- pip freeze > requirements.txt
- deactivate
-
修改.gitignore文件
- .idea/
- venv/
-
把改动提交到仓库
- $ git status
- $ git add requirements.txt
- $ git add .gitignore
- $ git commit -m ‘env init’
- $ git push --set-upstream origin v0.1-django-start
title: git与gitee开发使用
date: 2019-06-16 10:34:55
tags:
- git 使用
categories: git
前言
Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。同时,git 是在今后的工作中用到的一门十分重要的技术,方便团队开发以及数据的保留。所以熟悉相关的使用是有必要的,之前b站代码泄漏的事情也让我觉得确实需要重视一下git的使用。还有16天,开心心,幸福生活即将来临!!!
仓库文件概述
.gitignore
用于保存不希望被同步到仓库中的文件,我们在本地工程常会修改一些配置文件,这些文件不需要被提交,而我们又不想每次执行git status时都让这些文件显示出来,就可以加入到.gitignore 文件中。
README.md
仓库自述文件,一般用来介绍项目及基本的使用操作
常用git命令
- git clone + 远端仓库地址 :克隆远端仓库到本地
- git status :查看当前工作区和暂存区文件的状态。
git status –s:查看工作区状况 - git log : 查看历史
- git add : 标记文件添加到仓库
git add . =>标记当前目录及子目录的文件 - git commit : 提交文件到本地才仓库
- git branch [分支名] : 添加新的分支
git branch -a : 查看所有分支 - git pull :拉取远端仓库的内容(更新本地仓库)
- git push : 提交到远端仓库
- git checkout :切换分支
git 合并远程分支的操作
# 查看分支
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/homework
remotes/origin/master
# 本地没有要合并的分支就先创建
$ git branch homework
# 切换分支
$ git checkout homework
Switched to branch 'homework'
# 查看目的源
$ git remote -v
origin http://git.sanchuangedu.cn:3000/chenpb/python2019Summer.git (fetch)
origin http://git.sanchuangedu.cn:3000/chenpb/python2019Summer.git (push)
# 拉去远端仓库的分支内容
$ git pull origin homework
From http://git.sanchuangedu.cn:3000/chenpb/python2019Summer
* branch homework -> FETCH_HEAD
Updating 0c27965..24f384d
git 提交例子:
# 切换到test1分支
$ git checkout test1
Switched to branch 'test1'
# 添加文件
$ vim myhomework.txt
# 将myhomework.txt创建快照,进行暂存态
$ git add myhomework.txt
warning: LF will be replaced by CRLF in myhomework.txt.
The file will have its original line endings in your working directory.
# 提交到本地仓库
$ git commit
[test1 a749a0f] add file myhoework.txt
1 file changed, 1 insertion(+)
create mode 100644 myhomework.txt
# 提交到远程仓库
$ git push origin test1
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 297 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Powered by Gitee.com
To https://gitee.com/vaster/python201802.git
a7f9383..a749a0f test1 -> test1
git 冲突问题
冲突发生的原因
开发过程中,我们都有自己的特性分支,所以冲突发生的并不多,但也碰到过。诸如公共类的公共方法,我和别人同时修改同一个文件,他提交后我再提交就会报冲突的错误。
发生冲突,在IDE里面一般都是对比本地文件和远程分支的文件,然后把远程分支上文件的内容手工修改到本地文件,然后再提交冲突的文件使其保证与远程分支的文件一致,这样才会消除冲突,然后再提交自己修改的部分。特别要注意下,修改本地冲突文件使其与远程仓库的文件保持一致后,需要提交后才能消除冲突,否则无法继续提交。必要时可与同事交流,消除冲突。
解决冲突
通过git stash命令,把工作区的修改提交到栈区,目的是保存工作区的修改;
通过git pull命令,拉取远程分支上的代码并合并到本地分支,目的是消除冲突;
通过git stash pop命令,把保存在栈区的修改部分合并到最新的工作空间中;
将dev分支的内容合并到master分支
#先查看下当前的本地和远程分支
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/dev
remotes/origin/master
#确保master分支也是最新的
$ git pull
Already up to date.
#切换到dev 分支
$ git checkout dev
#确保dev 分支也是最新的
$ git pull
Already up to date.
#执行合并的关键代码,此时执行结果时将本地的master合并到本地dev分支
$ git merge master
#将合并的本地dev分支推送到远程dev
$ git push origin dev