python笔记(git指令,与github操作)

本文主要来自

一、Git简介

相信大家都用过SVN,但是SVN会受网络的限制,之前入职一家公司的时候,SVN上有很多东西需要check out下来,极受网络影响不说,有时还会中断,效率会很低。而Git恰恰在有SVN的优点的同时又能完美的解决这个问题。这也是集中式和分布式版本控制系统的区别
CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统。

二、安装git和操作git

  1. Git在Windows上的安装

    msysgit是Windows版的Git,从迅雷上下载(也可下载国内镜像),然后按默认选项安装即可。安装好后需要设置邮箱和名字,随便写就好

    $ git config --global user.name "Your Name"
    $ git config --global user.email "[email protected]"
    

    附注:若电脑安装的时候遇到邮箱和名字设置命令未生效的情况,解决方法:
    找到工程目录的.git文件夹,打开之后找到config文件,在最后边加上一句话:

    [user]
     email=your email
     name=your name
    
  2. Git创建库

    版本库又名仓库,可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,可以查看每个文件的删除,修改等变更信息。创建库的过程(建在D盘为例):

    cd D: 进入E盘
    mkdir learngit 在E:盘下建立learngit文件夹
    cd learngit 进入learngit文件夹
    git init 将当前目录变成Git可以管理的仓库(成功:Initialized empty Git repository in /d/learngit/.git/

  3. Git基本操作

    添加文件到Git仓库,分两步:

    第一步,使用命令git add ,注:可反复多次使用,添加多个文件:

    $ git add file1.txt
    $ git add file2.txt file3.txt
    $ git commit -m "add 3 files."
    

    第二步,使用命令git commit ,完成。

    要随时掌握工作区的状态,使用git status 命令(在commit之前可查看当前版本库要提交的内容)。

    如果git status告诉你有文件被修改过,用git diff可以查看修改内容(用在修改文件之后,git add之前)。

    版本控制系统有某个命令可以告诉我们历史记录,在Git中,我们用git log 命令查看版本操作记录(git log 显示版本从最近到最远的记录)。如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline 参数。git reflog 可查看更加详细的记录

    注:可以通过git help log/add/commit=oneline 等查看相关命令的帮助;

    Git的可视化工具——SourceTree是款WindowsMac可视化工具,可以更清楚地看到提交历史的时间线,个人不推荐使用,感兴趣的可自行Goolgle.

  4. 版本回退

    首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交操作。上一个版本就是`HEAD^`上上一个版本就是`HEAD^^`,当然往上100个`^`版本写100个比较容易数不过来,所以写成`HEAD~100`。 
    (1)Git允许我们在版本的历史之间穿梭,使用命令`git reset --hard commit_id`进行版本随意穿梭。例如:要回到上个版本库使用命令:`git reset --hard HEAD^`;
    
    (2)回退前,用`git log` 可以查看提交历史(版本库状态),以便确定要回退到哪个版本;
    
    (3)回退后,想要重返回退前的版本,使用`git reset --hard HEAD^`是不行的,这时用`git relog`查看命令历史(可以看到相应的`commit_id`),以便确定要回到未来的哪个版本,再进行第一步操作进行重返。
    
  5. 工作区和暂存区

    工作区:就是你在电脑里能看到的目录,例如C盘,E盘下的工作目录。

    暂缓区
    工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
    Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

    我们往版本库添加文件时,是分两步进行的:

    第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
    第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
    因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
    你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改

  6. 修改和删除

    管理修改
    操作重演:
    第一次修改 ->git add -> 第二次修改 ->git commit
    Git管理的是修改,当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。
    提交后,可以用git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别。
    每次修改,如果不add到暂存区,那就不会加入到commit中。
    vi模式为编辑文件模式:
    vi readme.txt (进入vi模式进行编辑)
    Esc键 (进入末行模式)
    输入 :wq (保存对readme.txt的修改并返回到git

    撤销修改:
    Git会告诉你,git checkout -- file可以丢弃工作区的修改:git checkout -- readme.txt
    场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
    场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
    场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,使用版本回退操作,不过前提是没有推送到远程库。

    删除文件:
    命令git rm + git commit用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。

  7. 远程库

    上传内容至远程库:

    1)在GitHub注册账号(userid:repo-name)后,新建一个仓库:server-name

    2)在本地仓库使用git remote add origin [email protected]:repo-name/server-name.git关联网上的仓库

    3)关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
    此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;

    远程库内容更新到本地:
    使用git pull --rebase origin master即可把远程库中的内容添加到本地仓库中

    直接克隆远程库到本地:

    git clone [email protected]:repo-name/server-name.git
    
  8. 分支管理

    查看分支:git branch

    创建分支:git branch <name>

    切换分支:git checkout <name>

    创建+切换分支:git checkout -b <name>

    合并某分支到当前分支:git merge <name>

    删除分支:git branch -d <name>

    Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

    git log --graph --pretty=oneline --abbrev-commit命令可以看到分支合并图(--graph会在各个提交之间打印出线条,这些线条可以展示出分支之间的关系。

    常用的--pretty选项,可以指定使用完全不同于默认格式的方式展示提交历史,--pretty=oneline只是在一行中显示 sha1 和 提交的注释。--abbrev-commit 用开始的7sha1字符代替整个sha1

    一般Git会默认使用Fast forward(快速合并)模式,但会丢掉一些分支信息(看不出来曾经做过合并),禁用Fast forward模式(因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去):

    $ git merge --no-ff -m "merge with no-ff"  <name>
    

    合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并。

    1)修改bug
    当手头工作没有完成时,先把工作现场git stash一下,git stash list可查看stash的内容,然后去修复bug(新建分支解决bug再合并到master),修复后,再切换到工作分支git stash pop,回到工作现场。

    开发一个新feature,最好新建一个分支;

    如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。

    2)多人协作
    查看远程库信息,使用git remote -v

    本地新建的分支如果不推送到远程,对其他人就是不可见的;

    从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull origin branch-name抓取远程的新提交;

    在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

    建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name
    从远程抓取分支,使用git pull origin branch-name,如果有冲突,要先处理冲突。

    PS:输入git config --global push.default simple,之后就可以直接用git push提交当前分支而不用再写git push origin branch-name

  9. 标签管理

    创建标签 :
    git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id;

    git tag-a <tagname> -m “blablabla…”可以指定标签信息;

    git tag -s <tagname> -m “blablabla…”可以用PGP签名标签;

    git tag可以查看所有标签。

    操作标签 :
    git push origin <tagname>可以推送一个本地标签;

    git push origin --tags可以推送全部未推送过的本地标签;

    git tag -d <tagname>可以删除一个本地标签;

    git push origin :refs/tags/<tagname>可以删除一个远程标签。

  10. 使用GitHub

    在GitHub上,可以任意Fork开源仓库,自己拥有Fork后的仓库的读写权限,可以推送pull request给官方仓库来贡献代码

  11. 自定义Git

    忽略某些文件时,需要编写.gitignore;.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!

    给Git配置好别名,就可以输入命令时偷个懒:

       git config --global alias.st status;
       git config --global alis.last 'log -1';
    
       git --global alias"log --color --graph --pretty=format:
       '%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
    

三、命令汇总

git init              初始化一个仓库
git add 文件名		  对指定文件进行版本控制
git add .    		  对指定文件夹下的所有文件及子目录进行版本控制.    
git status            查看当前文件夹的状态   
git commit -m '详细的描述信息'               创建提交记录(版本)
git log               查看提交版本
git reflog            查看提交详细版本
git reset --hard 提交记录(版本号)                回滚之前版本i
           

git stash 
git stash pop 

git stash           将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态
git stash list      查看“某个地方”存储的所有记录
git stash clear     清空“某个地方”
git stash pop       将第一个记录从“某个地方”重新拿到工作区(可能有冲突)
git stash apply     编号, 将指定编号记录从“某个地方”重新拿到工作区(可能有冲突) 
git stash drop      编号,删除指定编号的记录
git stash作用,帮助我们暂时存储已经开发一些功能的代码,继续做其他事情,做完之后,再回来继续开发

git branch             查看分支
git branch dev         创建分支
git branch bug         创建一个bug分支
git branch -d bug      删除一个bug分支
git checkout dev       跳转到dev分支
git merge bug          合并bug分


git remote add origin .........         连接远程仓库
git push origin dev                     提交到远程
git clone https://github.com/WuPeiqi/dbhot.git      复制远程版本
git pull origin dev 
    ‘’‘将git pull 分两步操作’‘’
	git fetch origin dev               
	git merge origin/dev   改:  git rebase origin/dev   (可避免合并时出现分叉)
git pull origin master 
	git fetch origin master
	git merge origin/master


git tag -a v1.0 -m '版本介绍'        本地创建Tag
git show v1.0                       查看
git tags -n                         查看本地Tag
git tag -l 'v1.4.2.*'               查看本地Tag,模糊匹配
git tag -d v1.0                     删除Tag
git push origin :refs/tags/v0.2     更新远程tag
git checkout v.10                   切换tag
git fetch origin tag V1.2       

git push origin  --tags      推送本地所有版本到远程
git pull origin  --tags      拉远程所有版本
git clone -b v1.0  https://github.com/WuPeiqi/dbhot.git     复制远程版本
.gitignore       忽略文件

a. 不用反复输入用户名密码登录
Https的方式:
	https://用户名:密码@github.com/WuPeiqi/dbhot.git
	git remote add origin  https://用户名:密码@github.com/WuPeiqi/dbhot.git

SSH的方式:
	[email protected]:WuPeiqi/dbhot.git

猜你喜欢

转载自blog.csdn.net/qq_41433183/article/details/89300708
今日推荐