python如何用git处理项目_Git的使用

声明:参考博客

一、Git工作流程图

Workspace:工作区

Index/Stage:暂存区

Repository:仓库区(或本地仓库)

Remote:远程仓库

二、Git的安装和配置

1、安装

1、liunx

Centos为例

yum install git

如果你在基于 Debian 的发行版上,请尝试用 apt-get:

apt-get install git2、Mac安装

在mac安装git,最简单是用brew包管理

安装homebrew,然后通过homebrew安装Git:brew install git3、Windows安装

在Windows上使用Git,可以从Git官网直接下载安装程序,然后按默认选项安装即可。

安装完成后,在开始菜单里找到“Git”->“Git Bash”,即可使用!4、linux上的config配置

每台计算机上只需要配置一次,程序升级时会保留配置信息。 你可以在任何时候再次通过运行命令来修改它们。

Git自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置:/etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有 --system 选项的 git config 时,它会从此文件读写配置变量。~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户。 可以传递 --global选项让 Git 读写此文件。

当前使用仓库的 Git 目录中的 config 文件(就是 .git/config):针对该仓库。 --local 当前仓库配置5、配置用户信息

设置你的用户名称与邮件地址(这个很重要)

每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改

$ git config--global user.name "your name"$ git config--global user.email "your email"

6、git配置相关命令

yum install git-y 安装git

git--version 查看git版本

git config--system --list 查看系统所有linux用户的通用配置,此命令检查/etc/gitconfig

git config--global --list 查看当前linux用户的配置,检查~/.gitconfig文件

git config--local --list 查看git目录中的仓库配置文件,.git/config文件

git config--global user.name "your name"配置当前linux用户全局用户名,这台机器所有git仓库都会用这个配置

git config--global user.email "your email"配置当前linux用户全局邮箱

git config--globalcolor.ui true 配置git语法高亮显示

git config--list 列出git能找到的所有配置,从不同的文件中读取所有结果

git config user.name 列出git某一项配置

git help 获取git帮助

man git man 手册

git help config 获取config命令的手册

2、如何配置github

1.在电脑本地新建一个空文件夹

git init#初始化本地仓库

2.配置git用户名和邮箱

git config--global user.name "写你的用户名"git config--global user.email "写你的邮箱"

3.github上配置秘匙

ssh-keygen -t rsa -b 4096 -C "你刚才配置的邮箱" #遇到需要输入的全按enter即可#生成的秘匙默认在 ~/.ssh 目录下,把公匙(pub后缀的那个文件打开即可)复制到github上

vim ~/.ssh/id_rsa.pub4.添加仓库

首先在github上新建一个仓库,然后添加远程仓库

git remote add origin [email protected]:xxx/xxxx.git #远程仓库地址

5.git可正常使用了

三、Git命令

1、新建代码库

#在当前目录新建一个Git代码库

$ git init#新建一个目录,将其初始化为Git代码库

$ git init [project-name]#下载一个项目和它的整个代码历史(克隆下来的远程仓库别名默认是:origin)

$ git clone [url]

2、配置

Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)

#显示当前的Git配置

$ git config --list#编辑Git配置文件

$ git config -e [--global]#设置提交代码时的用户信息

$ git config [--global] user.name "[name]"$ git config [--global] user.email "[email address]"

3、增加/删除文件

#添加指定文件到暂存区

$ git add [file1] [file2] ...#添加指定目录到暂存区,包括子目录

$ git add [dir]#添加当前目录的所有文件到暂存区

$ git add .#添加每个变化前,都会要求确认#对于同一个文件的多处变化,可以实现分次提交

$ git add -p#删除工作区文件,并且将这次删除放入暂存区

$ git rm [file1] [file2] ...#停止追踪指定文件,但该文件会保留在工作区

$ git rm --cached [file]#改名文件,并且将这个改名放入暂存区

$ git mv [file-original] [file-renamed]

4、代码提交

#提交暂存区到仓库区

$ git commit -m [message]#提交暂存区的指定文件到仓库区

$ git commit [file1] [file2] ... -m [message]#提交工作区自上次commit之后的变化,直接到仓库区

$ git commit -a#提交时显示所有diff信息

$ git commit -v#使用一次新的commit,替代上一次提交#如果代码没有任何新变化,则用来改写上一次commit的提交信息

$ git commit --amend -m [message]#重做上一次commit,并包括指定文件的新变化

$ git commit --amend [file1] [file2] ...

5、分支

#列出所有本地分支

$ git branch#列出所有远程分支

$ git branch -r#列出所有本地分支和远程分支

$ git branch -a#新建一个分支,但依然停留在当前分支

$ git branch [branch-name]#新建一个分支,并切换到该分支

$ git checkout -b [branch]

# 以某个远程分支为基准,创建新的分支

$ git checkout -b [branch] [master/develop]#新建一个分支,指向指定commit

$ git branch [branch] [commit]#新建一个分支,与指定的远程分支建立追踪关系

$ git branch --track [branch] [remote-branch]#切换到指定分支,并更新工作区

$ git checkout [branch-name]#切换到上一个分支

$ git checkout -

#建立追踪关系,在现有分支与指定的远程分支之间

$ git branch --set-upstream [branch] [remote-branch]#合并指定分支到当前分支

$ git merge [branch]#选择一个commit,合并进当前分支

$ git cherry-pick [commit]#删除分支

$ git branch -d [branch-name]#删除远程分支

$ git push origin --delete [branch-name]

$ git branch-dr [remote/branch]

6、标签

#列出所有tag

$ git tag#列出所有v1.xx的tag

$ git tag -l "v1.*"

#新建一个tag在当前commit

$ git tag [tagName]#新建一个tag在指定commit

$ git tag [tagName] [commit]#给tag添加备注

$ git tag -a [tagName] -m "备注信息"

#查看tag信息

$ git show [tagName]#提交指定tag

$ git push [remote] [tagName]#提交所有tag

$ git push [remote] --tags#删除本地tag

$ git tag -d [tagName]#删除远程tag

$ git push origin :refs/tags/[tagName]

$ git push origin--delete [tagName]#新建一个分支,指向某个tag

$ git checkout -b [branch] [tagName]

7、查看信息

#显示有变更的文件

$ git status#显示当前分支的版本历史

$ git log#显示commit历史,以及每次commit发生变更的文件

$ git log --stat#搜索提交历史,根据关键词

$ git log -S [keyword]#显示某个commit之后的所有变动,每个commit占据一行

$ git log [tag] HEAD --pretty=format:%s#显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件

$ git log [tag] HEAD --grep feature#显示某个文件的版本历史,包括文件改名

$ git log --follow [file]

$ git whatchanged [file]#显示指定文件相关的每一次diff

$ git log -p [file]#显示过去5次提交

$ git log -5 --pretty --oneline#显示所有提交过的用户,按提交次数排序

$ git shortlog -sn#显示指定文件是什么人在什么时间修改过

$ git blame [file]#显示暂存区和工作区的差异

$ git diff#显示暂存区和上一个commit的差异

$ git diff --cached [file]#显示工作区与当前分支最新commit之间的差异

$ git diff HEAD#显示两次提交之间的差异

$ git diff [first-branch]...[second-branch]#显示今天你写了多少行代码

$ git diff --shortstat "@{0 day ago}"

#显示某次提交的元数据和内容变化

$ git show [commit]#显示某次提交发生变化的文件

$ git show --name-only [commit]#显示某次提交时,某个文件的内容

$ git show [commit]:[filename]#显示当前分支的最近几次提交

$ git reflog

8、远程同步

#下载远程仓库的所有变动

$ git fetch [remote]#显示所有远程仓库

$ git remote -v#显示某个远程仓库的信息

$ git remote show [remote]#增加一个新的远程仓库,并命名

$ git remote add [shortname] [url]#取回远程仓库的变化,并与本地分支合并

$ git pull [remote] [branch]#上传本地指定分支到远程仓库

$ git push [remote] [branch]#强行推送当前分支到远程仓库,即使有冲突

$ git push [remote] --force#推送所有分支到远程仓库

$ git push [remote] --all

9、撤销

1.git reset HEAD -- 将从缓存区清除,回到工作区2.git checkout -- 将工作区的内容清除,先从缓存区中拉取版本还原,如果没有再到版本库中拉取还原#这两步就相当于:git reset --hard commit_id

3.删除新增的文件

想批量删除branch中新加的文件,git reset--hard是不行的,

也就是说上面两步是清除了新改动但还没有commit的内容,下面这一步是清除新增但还没commit的文件:

git clean-df -- . #删除所有新增的文件和目录

git clean -df a.txt #删除a.txt文件

参数:

d: 删除目录

f: 删除文件4.清理所有#三个命令一起使用,可以将项目所有的改动清理掉

git reset HEAD --.

git checkout--.

git clean-df -- .

10、其他

# 生成一个可供发布的压缩包

$ git archive

四、Git的应用

1、本地连接远程仓库

连接远程仓库的方式:1.https 2.ssh#为什么要配置公钥和私钥:

Git使用https协议,每次pull, push都要输入密码,相当的烦。

使用git协议,然后使用ssh密钥。这样可以省去每次都输密码。

公钥我们一般是给服务器的,他们到时候在权限中加入我给的公钥,然后当我从远地仓库中下载项目的时候,我在git clone xxx的时候,那个服务器我通过他的绑定的公钥来匹配我的私钥,这个时候,如果匹配,则就可以正常下载,如果不匹配,则失败.

大多数 Git 服务器都会选择使用 SSH 公钥来进行授权。系统中的每个用户都必须提供一个公钥用于授权,没有的话就要生成一个。#SSH公私匙的配置

1.在本地用户目录下生成公钥私钥

ssh-keygen -t rsa -C "[email protected]"

2.结果会在C:\Users\Administrator\.ssh生成两个.ssh文件,存放你的公钥私钥3.把公钥放入GitHub#命令

1.添加远程仓库

git remote add [shortname] [ssh地址]2.查看连接的远程仓库的别名

git remote3.推送代码到远程仓库

git push [shortname] [branch]4.克隆仓库

git clone 仓库地址-->当你克隆了别人的仓库后,默认给仓库命名为origin5.再次把代码推送到远程仓库

git pushorigin master # 把master分支推送到远程仓库6.从远程仓库拉代码到本地

git pull origin master#注意

如果没有配置SSH key就只能clone代码不能push上去(只读),也就是说你的SSH key对应你github的仓库

GitHub允许添加多个Key。加入有多台电脑,你一会儿在公司提交,一会儿在家里提交,

只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。

2、上传分支代码到远程仓库

1、建立本地仓库

在你的工作目录下输入命令:git init#建立本地仓库

2、将代码提交到本地仓库

git add . 或者指定提交某个文件 git add [file]

git commit-m "test commit" 或指定提交某个文件 git commit [file] -m "提交信息"

3、在本地仓库中连接上一个远程仓库并给远程仓库起一个别名

git remote add origin [email protected]#给远程仓库起别名,可以是任意的,但一般用origin

或者

git clone [email protected]#默认也会给远程仓库起了个别名,也是origin

4、把本地的代码提交的远程仓库上1)首先要建立本地的分支,并切换到该分支上(本地建立完分支,默认是在master分支上)

git branch my_branch#创建本地分支

git checkout my_branch #切换到这个本地分支

或者直接一条命令

git checkout-b my_branch #创建本地分支并切换到此分支

或者

git checkout-b my_branch origin/develop #以远程仓库的develop分支为基准,创建本地分支(即my_branch的代码跟develop分支的一样的)

2)把代码push到远程仓库

命令:git push :应用:1, git push origin my_branch #origin是刚才我们为远程仓库起的别名,使用本地的对应分支来更新对应的远程分支

命令中的本地分支是指将要被推送到远端的分支,而远程分支是指推送的目标分支,即将本地分支合并到远程分支。

如果省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。

这里的含义是将本地my_branch这个分支提交到远程仓库上面。如果远程仓库没有这个分支,那么也会新建一个该分支。2,另一种方法,可以指定提交到远程仓库的某个分支上。如下,是将my_branch分支提交到远程仓库的master上面

git push origin my_branch:master5、从远程仓库拉取代码到本地分支1.git pull :git pull origin my_branch#将远程指定分支(my_branch) 拉取到本地当前分支上

git pull origin my_branch:local_branch #将远程指定分支(my_branch) 拉取到本地local_branch分支上

2.fetch2-1.

git fetch origin master 或者 git fetch--all #从远程的origin仓库的master分支下载到本地当前的分支

git merge origin/master #把远程下载下来的代码合并到本地仓库

2-2.

git fetch origin master:temp#从远程的origin仓库的master分支下载到本地并新建一个分支temp(但不会切换到temp分支)

git merge temp #合并temp分支到本地当前分支

6、删除分支1.删除本地分支: git branch -D my_branch #删除本地my_branch分支

2.删除远程分支2-1.如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支,这条命令是删除远程my_branch分支。

git push origin :my_branch2-2.

git push origin--delete my_branch

3、从远程仓库更新代码到本地

fetch更新本地仓库几种方式:#方法一

$ git fetch origin master 或者 git fetch --all #从远程的origin仓库的master分支下载到本地当前的分支

$ git merge origin/master #把远程下载下来的代码合并到本地仓库

#方法二

$ git fetch origin master:temp #从远程的origin仓库的master分支下载到本地并新建一个分支temp(但不会切换到temp分支)

$ git diff temp#比较本地当前分支和temp分支的不同

$ git merge temp#合并temp分支到本地当前分支

$ git branch-d temp #删除temp

# 方法三

$ git pull origin feature # 拉取远程仓库origin下的feature分支(需要手动解决冲突)

4、解决本地代码还没push上去,但是想从远程拉取最新代码

"""git stash会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录。

储藏(stash)可以获取你工作目录的中间状态——也就是你修改过的被追踪的文件和暂存的变更——并将它保存到一个未完结变更的堆栈中,随时可以重新应用。"""

#操作命令

1、git stash 将本地代码stash到仓库中。可以使用git stash save ***定义自己的标记,方便以后查询2、git pull 将远程代码拉取到本地。3、git stash list查看本地仓库中都存储了几个stash版本。4、git stash pop 将仓库中的代码合到本地最新代码中。5、git stash pop默认将最近一次stash操作合并到本地代码中,也可以通过git stash pop stash@{Number}指定将某次stash的内容合并到本地代码中。6、git stash pop命令在合并代码的同时,会把仓库中对应的内容弹出。如果只想查看,而不想弹出内容,可以使用git stash apply命令进行操作。7、git stash -h 查看git stash帮助8、git stash show 显示stash合并到本地代码后,哪些文件会修改,以及修改的概述9、git stash show -p stash@{0} 显示修改的详细内容10、如果想要删除stash保存的内容:

git stash clear#注意这是清空你所有的内容

git stash drop stash@{0} #这是删除第一个队列

5、分支管理常用命令

多分支管理常用命令:

git checkout-b xxx(新分支名) xxx(源分支名,不指定的默认为当前分支),-B表示,如果新分支名存在,则删除原来的分支再新建

git pull origin xxx(分支名),最好不要直接git pull,要加上仓库和分支名,否则,容易导致pull的分支不是自己想要的

git merge origin/xxx,在执行merge前,最好先git fetch --all,把远端的仓库代码同步到本地的origin

git rebase-i xxx(节点),合并节点只能在最后提merge的时候用,开发过程中不要用。并且,如果当前分支有一个merge节点,rebase不能包括这个merge节点

git cherry-pick xxx(节点),最好不用

6、git pull --rebase

1.git pull和git pull --rebase的区别

git pull相当于:git fetch+git merge FETCH_HEAD

git pull--rebase相当于:git fetch +git rebase FETCH_HEAD2.merge 和 rebase的区别

现在我们有这样的两个分支,test和master,提交如下

D---E mytest/A---B---C---F---master2-1.在本地master分支执行合并命令

git pull origin mytest

提交记录结果如下:

A---B---'D'---C---'E'---F---'G'---会生成一个新的提交记录信息 G

这样的话,就会对提交记录有污染2-2.在本地master分支执行合并命令

git pull--rebase origin mytest

提交记录结果如下:

A---B---'D'---C---'E'---F---并不会生成额外的提交记录信息3.小结

merge操作会生成一个新的节点,之前的提交分开显示。

而rebase操作不会生成新的节点,是将两个分支融合成一个线性的提交。4.合并代码冲突问题

git pull 产生冲突时,相当于merge操作遇到冲突,当前merge不能继续进行下去。

解决冲突的方法:1,手动修改冲突内容后,git add . && git commit -m "xxx"

2,手动修改冲突内容后,git add . && git merge --continue中断合并:

如果想要中断merge操作:git merge--abort

git pull--rebase 产生冲突时,相当于rebase操作遇到冲突,会中断rebase,同时会提示去解决冲突。

解决冲突的方法:1,手动解决冲突后,git add . && git rebase –-continue继续操作,这样git会继续apply余下的补丁。2,或者 git rebase -–skip 直接忽略冲突(一般不用这么做)

中断合并:

在任何时候,都可以用:git rebase--abort 参数来终止rebase的行动,并且分支会回到rebase开始前的状态

7、删除文件

在Git中,删除也是一个修改操作

1.当我们需要删除暂存区或分支上的文件, 同时工作区也不需要这个文件了, 可以使用

git rm file_path

git commit-m 'delete somefile'

"""如果你是删错了,在没有commit的情况下,远程仓库里还是有那个文件的,所以可以很轻松地把误删的文件恢复过来

git checkout -- file_path

git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。"""

2.当我们需要删除暂存区或分支上的文件, 但本地又需要使用, 只是不希望这个文件被版本控制, 可以使用

git rm--cached file_path

git commit-m 'delete remote somefile'

五、git rebase

多分支开发的时候,是不是经常就会遇到有些没必要的commit因为提交了合并请求而存在了呢,

这时候在你的commit里,看起来就不够整洁,那么该怎么办,我们可以使用rebase进行修改commit记录。

看例子吧:

比如我的commit记录如下,我需要将两条"需要合并的commit"合并成一条记录,

即把095759780db323f9e4ceca3a1e1dd1a8b0069d3e合并到只有

7455984ced33de3ef59a7c675993dadd6ee59b27,即删除最新(无用)的commit

### 我的commit 记录 ###

commit 095759780db323f9e4ceca3a1e1dd1a8b0069d3e

Author: ZBJ<[email protected]>Date: Mon Nov4 22:50:24 2019 +0800需要合并的commit

commit 7455984ced33de3ef59a7c675993dadd6ee59b27

Author: ZBJ<[email protected]>Date: Mon Nov4 22:50:09 2019 +0800需要合并的commit

commit ae22166712ed10091d1dce074e01ebacbf39c5fd

Author: ZBJ<[email protected]>Date: Sat Sep21 17:17:24 2019 +0800新建项目1、在执行git rebase前,推荐把最新的commit(095759780db323f9e4ceca3a1e1dd1a8b0069d3e)保存到临时文件,万一操作失误还能reset。2、选择rebase基点:

由于要合并的是7455984ced33de3ef59a7c675993dadd6ee59b27,

选择前一个做为rebase的基点,即:ae22166712ed10091d1dce074e01ebacbf39c5fd

执行命令:

$ git rebase-i ae22166712ed10091d1dce074e01ebacbf39c5fd

也可以使用:

$ git rebase-i 7455984ced33de3ef59a7c675993dadd6ee59b27~1,同样效果3、修改rebase文件

执行了上面rebase命令后,默认会以 vim 进行编辑,例如我的如下:

pick7455984需要合并的commit

pick 0957597需要合并的commit#Rebase ae22166..0957597 onto ae22166 (2 commands)#

#Commands:#p, pick = use commit#r, reword = use commit, but edit the commit message#e, edit = use commit, but stop for amending#s, squash = use commit, but meld into previous commit#f, fixup = like "squash", but discard this commit's log message#x, exec = run command (the rest of the line) using shell#b, break = stop here (continue rebase later with 'git rebase --continue')#d, drop = remove commit#l, label = label current HEAD with a name#t, reset = reset HEAD to a label#m, merge [-C | -c ] [# ]#. create a merge commit using the original merge commit's#. message (or the oneline, if no original merge commit was#. specified). Use -c to reword the commit message.#

#These lines can be re-ordered; they are executed from top to bottom.#

#If you remove a line here THAT COMMIT WILL BE LOST.#

#However, if you remove everything, the rebase will be aborted.#

#Note that empty commits are commented out

这里只需要关注非#注释的内容,即:

pick 7455984需要合并的commit

pick 0957597需要合并的commit#注释的内容为一些帮助说明信息,不需要修改

需要注意的是,这里commit的显示顺序跟 git log 的默认显示顺序相反的

这里则使用 fixup 或 f 命令来合并,我们想要的是删除最新的commit(0957597),即把0957597合并到前一个commit(7455984)中

修改后的内容为:

pick7455984需要合并的commit

f 0957597需要合并的commit

或者

pick7455984需要合并的commit

fixup 0957597需要合并的commit

修改后 :wq 或者 :x 退出 vim4、查看

此时git log 查看,会发现两条commit合并成了一条新的commit:

commit 1d2de971c6bf7f897903d7b1689dd20fe6f063d6

Author: ZBJ<[email protected]>Date: Mon Nov4 22:50:09 2019 +0800需要合并的commit

commit ae22166712ed10091d1dce074e01ebacbf39c5fd

Author: ZBJ<[email protected]>Date: Sat Sep21 17:17:24 2019 +0800新建项目5、push推送新分支

由于rebase操作会修改版本树,如果合并的几个commit仅存在于本地,则直接推送即可

$ git push

如果合并的几个commit,已经推送到远端了,则需要把本地的版本树覆盖掉远端,在push时使用--force或-f参数来强推

$ git push-f

6、如果需要修改commit的提交记录内容

有两种场景:

要修改的 commit 是最新的一次提交

要修改的 commit 不是最新的一次提交6-1、要修改的 commit 是最新的一次提交

使用 commit 命令的--amend 参数可以完成快速修改:

git commit--amend

会出现如下内容,此时直接修改那条commit记录的内容即可:

需要合并的commit#Please enter the commit message for your changes. Lines starting#with '#' will be ignored, and an empty message aborts the commit.#

#Date: Mon Nov 4 22:50:09 2019 +0800#

#On branch DRF#Changes to be committed:#modified: .idea/workspace.xml

6-2、要修改的 commit 不是最新的一次提交

这种情况需要使用 git rebase-i 来修改,

首先找到要修改的记录:ae22166712ed10091d1dce074e01ebacbf39c5fd

$ git rebase-i ae22166712ed10091d1dce074e01ebacbf39c5fd~1pick ae22166 新建项目

pick 65c1138 需要合并的commit记录#Rebase 50a09c3..65c1138 onto 50a09c3 (2 commands)#

#Commands:#p, pick = use commit#r, reword = use commit, but edit the commit message#e, edit = use commit, but stop for amending#s, squash = use commit, but meld into previous commit#f, fixup = like "squash", but discard this commit's log message#x, exec = run command (the rest of the line) using shell#b, break = stop here (continue rebase later with 'git rebase --continue')#d, drop = remove commit#l, label = label current HEAD with a name#t, reset = reset HEAD to a label#m, merge [-C | -c ] [# ]#. create a merge commit using the original merge commit's#. message (or the oneline, if no original merge commit was#. specified). Use -c to reword the commit message.#

#These lines can be re-ordered; they are executed from top to bottom.#

#If you remove a line here THAT COMMIT WILL BE LOST.#

#However, if you remove everything, the rebase will be aborted.#

#Note that empty commits are commented out

#步骤

1.找到需要修改的记录(pick ae22166 新建项目),把 pick 改成 r 或者 reword,保存退出2.接着会自动进入该条commit的编辑界面,此时可以直接修改commit内容,然后保存退出即可3.看到 Successfully rebased and updated 就表示修改成功了,再看 git log

六、清理项目

1.git reset HEAD -- 将从缓存区清除,回到工作区2.git checkout -- 将工作区的内容清除,先从缓存区中拉取版本还原,如果没有再到版本库中拉取还原#这两步就相当于:git reset --hard commit_id

3.删除新增的文件

想批量删除branch中新加的文件,git reset--hard是不行的,

也就是说上面两步是清除了新改动但还没有commit的内容,下面这一步是清除新增但还没commit的文件:

git clean-df -- . #删除所有新增的文件和目录

git clean -df a.txt #删除a.txt文件

参数:

d: 删除目录

f: 删除文件4.清理所有#三个命令一起使用,可以将项目所有的改动清理掉

git reset HEAD --.

git checkout--.

git clean-df -- .

七、Git分支管理策略

1、主分支Master

首先,代码库应该有一个、且仅有一个主分支。所有提供给用户使用的正式版本,都在这个主分支上发布。

Git主分支的名字,默认叫做Master。它是自动建立的,版本库初始化以后,默认就是在主分支在进行开发。

2、开发分支Develop

主分支只用来分布重大版本,日常开发应该在另一条分支上完成。我们把开发用的分支,叫做Develop。

这个分支可以用来生成代码的最新隔夜版本(nightly)。如果想正式对外发布,就在Master分支上,对Develop分支进行"合并"(merge)。

1.Git创建Develop分支的命令:

git checkout-b develop master2.将Develop分支发布到Master分支的命令:#切换到Master分支

git checkout master#对Develop分支进行合并

git merge --no-ff develop

上一条命令的--no-ff参数是什么意思。默认情况下,Git执行"快进式合并"(fast-farward merge),会直接将Master分支指向Develop分支。

使用--no-ff参数后,会执行正常合并,在Master分支上生成一个新节点。为了保证版本演进的清晰,我们希望采用这种做法。

3、临时性分支

前面讲到版本库的两条主要分支:Master和Develop。前者用于正式发布,后者用于日常开发。其实,常设分支只需要这两条就够了,不需要其他了。

但是,除了常设分支以外,还有一些临时性分支,用于应对一些特定目的的版本开发。临时性分支主要有三种:

* 功能(feature)分支

* 预发布(release)分支

* 修补bug(fixbug)分支

这三种分支都属于临时性需要,使用完以后,应该删除,使得代码库的常设分支始终只有Master和Develop。

4、 功能分支

第一种是功能分支,它是为了开发某种特定功能,从Develop分支上面分出来的。开发完成后,要再并入Develop。

功能分支的名字,可以采用feature-*的形式命名。

创建一个功能分支:

git checkout-b feature-x develop

开发完成后,将功能分支合并到develop分支:

git checkout develop

git merge--no-ff feature-x

删除feature分支:

git branch-d feature-x

5、预发布分支

第二种是预发布分支,它是指发布正式版本之前(即合并到Master分支之前),我们可能需要有一个预发布的版本进行测试。

预发布分支是从Develop分支上面分出来的,预发布结束以后,必须合并进Develop和Master分支。它的命名,可以采用release-*的形式。

创建一个预发布分支:

git checkout-b release-1.2develop

确认没有问题后,合并到master分支:

git checkout master

git merge--no-ff release-1.2对合并生成的新节点,做一个标签

git tag-a 1.2再合并到develop分支:

git checkout develop

git merge--no-ff release-1.2最后,删除预发布分支:

git branch-d release-1.2

6、修补bug分支

最后一种是修补bug分支。软件正式发布以后,难免会出现bug。这时就需要创建一个分支,进行bug修补。

修补bug分支是从Master分支上面分出来的。修补结束以后,再合并进Master和Develop分支。它的命名,可以采用fixbug-*的形式。

创建一个修补bug分支:

git checkout-b fixbug-0.1master

修补结束后,合并到master分支:

git checkout master

git merge--no-ff fixbug-0.1git tag-a 0.1.1再合并到develop分支:

git checkout develop

git merge--no-ff fixbug-0.1最后,删除"修补bug分支":

git branch-d fixbug-0.1

你可能感兴趣的:(python如何用git处理项目_Git的使用)