Git

版本控制
版本控制是一种记录一个或若干文件内容的变化,以便将来查阅特定版本修订情况的系统
作用
	备份文件、记录历史、时光机、多端共享(百度云)、团队协作
原始版本控制系统
本地版本控制系统(文件系统、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 -- filenamegit 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 resetgit 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 

学习链接

20道经典面试题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值