Git--- Github

Git基础

什么是git?

git是一个版本控制系统,也可以说当你的代码发生变化进行管理的工具.在git出现之前这样的工具SVN,CVS.

git和github的区别,

简单来说,git是一个版本控制的工具,github是一个代码托管平台,一个代码仓库.

用git管理项目

首先进入项目目录,启动git--->Git Bash Here,这样就开启了git管理系统启动了一个git图形界面,执行 $ git init . 初始化,在项目中便形成了一个.git的目录 然后通过一系列命令进行版本控制。

注意:项目内容在没有被管理的时候status为红色,被管理后为绿色!

#开始管理项目(基础3步走)

git init .    #首先初始化,生成 .git目录

git add .      #将整个项目管理起来

git commit -m  "项目01版本"  #"项目的01版本"当然执行的时候可能会报错,需要配置下git config 

"""
执行这两条命令配置邮箱和名称
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
"""

git分区

工作区: 项目中当前的编辑位置.

缓存区:git add 之后的区域,将文件放在缓存区.

版本库:commit之后的区域就是版本库.

git常用命令

git init .        # 初始化
git add .      # 将工作区的所有文件添加到缓存区
git commit -m “提交信息”   #将缓存区的内容添加到版本库,注意:"提交信息"写的越详细越好!方便后期管理
git status                           #查看当前的状态

git reset --hard  hash值     #回退到指定的版本,这里的hash值就是每次commit的时候都会生成一个类似md5值的字符串,例如 "9d2aaf3ea89a9e6b8d8050a6d1a730f6bb4a0d85"

git checkout -- file(指定文件)        # 将文件回滚到最近一次提交的样子    该命令比较危险在不确认文件用途的时候慎用!!!


git log                          # 查看当前位置之前的提交记录
git log -p 文件       #指定版本库的区别
git log pretty=online     #将commit过的值 版本库信息全部显示
git log --pretty="format:%an %h %T %ar"   #格式化显示版本库信息  例如%an  作者名称  %h 用户简短hash值 %ar修订日期 %T树状显示

git reflog                      #查看所有的记录(只要提交过的记录就能查到)

git reset HEAD file      # 将文件从缓存区拉取到工作区

git diff     对比文件                # 对比工作区和缓存区
git diff --cached    对比文件      # 对比版本库和缓存区

git-快照

git stash    #将当前内容创建一个快照,并回到最后一次提交的位置,前提是有改变的情况下
git stash list  #查看快照列表

git stash pop  回到快照位置,并删除这个快照  相当于以下两条命令集合
git stash apply   #回到快照
git stash drop    #删除快照

git-分支

分支的作用就是用于团队协同开发,这样代码就会出现较大分歧。这时候就需要用到分支了,不同的任务组在不同的分支上开发,互相之间不会影响。git分支的特性和BUG修改都在不同的分支上进行开发和测试。这样规范了整个软件的开发流程。分支之间的互不影响这种特性可以增加团队合作的效率。GIT分支的另外一个重要特性就是可以合并不同软件仓库(fork)的分支。

注意点:一般来说禁止在master分支上修改,因为master为线上代码,一旦出现问题,会产生严重的后果.基本上在dev分支上修改

#分支的常用命令
git branch  name   #创建一个分支
git branch             #查看分支列表
git checkout name   #切换分支
git branch -d name   #删除指定分支

git checkout -b name   #在当前分支的基础上 创建并切换一个分支

git merge master bug    #将这两个分支合并

冲突

#下面这种情况就表示出现了冲突
Auto-merging templates/car.html
CONFLICT (content): Merge conflict in templates/car.html
Automatic merge failed; fix conflicts and then commit the result.

<<<<<<< HEAD
    <li>兰博基尼2/3</li>
=======
    <li>兰博基尼1/2</li>
>>>>>>> dev1

Auto-merging templates/car.html
CONFLICT (content): Merge conflict in templates/car.html
The stash entry is kept in case you need it again.

 
<<<<<<< Updated upstream
<li>奇瑞瑞虎7</li>
=======
<li>奇瑞瑞虎</li>
>>>>>>> Stashed changes

#分支和dev1同时改动同一个文件相同的地方,合并的时候git无法处理,产生冲突,需要人为解决
#创建快照之前,将li标签改为奇瑞瑞虎,当创建快照后然后在将li标签改为奇瑞瑞虎7,当执行删除快照 git stash pop 的时候就会产生冲突,需要手动选择解决

Github托管代码

将代码上传github

1.先创建一个仓库,选择公开和私有随意.

#上传操作
git remote add origin https://github.com/liuxiaofei1071/shop.git     #将自己github url地址重命名为origin  
git push origin master   #此时上传master分支代码到github的coco仓库 ,如果没登录Github就需要进行登录

2.这样只能上传master分支,如果是多分支的话

git push origin dev   #传dev分支到github

git push origin dev1   #传dev分支到github

将从github代码拉取到本地

1.进入对应仓库,如我的 liuxiaofei1010/shop,点击Clone or download按钮,复制github上的项目url,在git中执行对应的命令

#相关git命令
git clone github的url      #该命令就可以将代码从github上拉取下来,但是仅限于master分支

#拉取其他分支代码
git checkout -b dev origin/dev   #拉取dev分支
git checkout -b dev1 origin/dev1  #拉取dev1分支

两台机器分别更改github代码

#公司pc
git pull origin dev1    #将dev1分支代码同步到机器dev1分支
#修改后
git push origin dev1   #将本地dev1分支代码同步到github的dev分支

#home-pc
操作同上..

两台机器分别更改代码同一位置push异常

#错误信息
$ git push origin dev1
To https://github.com/liuxiaofei1071/shop.git
 ! [rejected]        dev1 -> dev1 (fetch first)
error: failed to push some refs to 'https://github.com/liuxiaofei1071/shop.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

#这就是所谓的提交冲突问题
#严格按照公司规定
1.每个人都用自己的分支,在自己的分支上提交
2.合并分支的时候人都要在,各自对自己的代码负责
3.完成一个小功能合并一次(2-3)
4.一般组长来合并代码
5.review
   组长
   带你的人
解决提交冲突问题

 变基

#作用就是将多台机器push后的分支由曲线变为一条直线

git rebase   #变基  --鸡肋 --治疗强迫症 

给别人贡献代码

#加好友步骤
1.进入对方github所在项目 -->settings --->Collaborators
2.输入对方username 添加对方,等待对方email验证通过
3.方式一 : 通过后进入对方项目,拿到对方项目url,通过git clone 克隆,本地修改
3.方式二 : 个人用户下拉框 settings --->Organizations --> 新建一个组织 --->设置组织名称,邮箱 --->邀请成员 --->Continue --->Submit
github加好友
#给别人修改代码
1. Fork --选择自己/创建的组织
2. 本地进行修改即将改动的地方,
3.new pull request
4.等待对方确认即可
贡献代码

tags标签 

一般在大项目开发完成或项目开发到一个里程碑的时候会打上标签

#常用命令
git tag -a v1.0 -m "标签信息"    #打造一个标签

git tag   #查看标签

git push origin --tags    #push到github

git tag -d v1.0   #删除标签

git push origin :refs/tags/v1.0   #推送一个空的标签

忽略敏感信息 

例如不想被别人看到的信息 db 

#了解. gitignore文件

Gitpython

用python操作git

安装模块 gitpython

from git import Repo

repo = Repo("PATH")

repo.index.add()    #添加
repo.index.commit()   #提交
repo.index.checkout()    #回滚
repo.index.reset(commit=hash5,head=True)

repo.create_head()  #创建分支
repo.create_tag()    #创建标签
repo.branches()   #获取所有的分支

r = git.Repo.clone_from(url,to_path)    #克隆
r.remote()
r.pull()
r.push()

g = git.Git(PATH)
g.add()
g.commit ("-m ")

 ...待续

原文地址:https://www.cnblogs.com/CrazySheldon1/p/10710382.html