git 回退版本

Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

现在,我们要把当前版本A ,回退到上一个版本“B”,就可以使用git reset命令:

$ git reset –hard HEAD^

HEAD is now at ea34578 B

也可以查询版本 :git log –pretty=oneline

显示出所有提交版本记录,选择 id

执行 git rest –hard id即可。

Git将一个分支完全覆盖另一个分支的操作方法

假设每个人有个开发分支,想隔一段时间就把自己的开发分支上的代码保持和测试分支一直,则需要如下操作:

1.我想将test分支上的代码完全覆盖dev分支,首先切换到dev分支
git checkout dev

2.然后直接设置代码给远程的test分支上的代码
git reset –hard origin/test

3.执行上面的命令后dev分支上的代码就完全被test分支上的代码覆盖了,注意只是本地分支,这时候还需要将本地分支强行推到远程分支。
git push -f 本地分支:远程分支

git 删除提交记录

最近做项目接了一个活,将项目开源,提升代码开源率.具体要怎么做呢?

  • 抽取收敛配置参数
  • 将配置置于单独的代码库或是共同的存储位置(和本身开源代码剥离)
  • 清除开源代码库的提交记录
  • 清除开源代码库的所有tag

前两步不是我们这里介绍的重点,这里介绍一下,如何清除一条代码分支的所有git 记录

//基于当前分支新建一条提交记录为空的代码分支
git checkout --orphan [new_branch_name]

//添加所有文件
git add -A

git commit -am 'submit message'

git branch -D master //(删除当前的分支)

git branch -m master //将当前分支重命名成master

git push -f origin master //将新的master分支推送到远端代码仓库

用上述的方法可以将master分支的所有提交记录清空

如何删除git tag呢,这里分为两种,一种是删除本地的tag,一种是删除远程的tag

//删除本地tag
git tag -d [要删除的tag_name]

//删除远程tag
git push origin :refs/tags/[要删除的tag_name]

//查看本地tag
git tag

//查看远程tag
直接通过git 的页面可以查看

如何删除远程代码分支

git push origin --delete [要删除的分支名]

如何删除本地分支

git branch -D [分支名]

如何查看所有分支

git branch -a

如何查看本地分支

git branch -vv

删单个文件的提交记录

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch xxxx/file.ext' --prune-empty --tag-name-filter cat -- --all

git push origin master --force

然后再重新提交文件

git clone/git fetch/git pull的区别

1.git clone

将其他仓库克隆到本地,包括被clone仓库的版本变化。举个例子,你当前目录比方说是在/data/www/中,此时若想下载远程仓库,直接git clone url(url是你远程仓库的地址,直接复制就可以了)。执行git clone等待clone结束,/data/www/目录下自动会有一个.git的隐藏文件夹(如果看不见,请尝试设置隐藏文件夹可见),因为是clone来的,所以.git文件夹里存放着与远程仓库一模一样的版本库记录。clone操作是一个从无到有的克隆操作

git clone <版本库的url> [<目录名>] (目录名可选)

2. git fetch

更新远程到本地仓库,理解fetch的关键,在于理解FETCH_HEAD,FETCH_HEAD指:某个branch在服务器上的最新状态。这个列表保存在.git/FETCH_HEAD文件中,其中每一行对应于远程服务器的一个分支。

20168aa26f27b3b19778debad9c65272ea23dd7b                branch 'zzzzz' of http://git.code.oa.com/xxxxx/yyyyy

一般两种情况:

  • 如果没有显式指定远程分支,则以master分支为默认的FETCH_HEAD
  • 如果指定了远程分支,将这个远程分支作为FETCH_HEAD

更新本地仓库方法 :

git fetch origin master //从远程origin仓库的master分支下载代码到本地的origin master
git log -p master.. origin/master //比较本地仓库和远程仓库的区别
git merge orgin/master
git fetch origin master:temp
git diff temp
git merge temp
git branch -d temp

3. git pull

git pull 远程主机名 远程分支名:本地分支名

git pull 会将代码拉下来,进行merge, git fetch 只拉代码,合并要自己去做

git pull origin master:localbranch

=>

git fetch origin master:localbranch
git merge localbranch

如何删除git仓库所有提交历史记录

旧项目提交到git上,会有git提交的log, 这些log 可能会有密码等敏感信息.如果不介意删除git log的话,形成一个新的仓库.可以如下操作

  • git checkout –orphan new_branch_name
  • Add all the files
git add -A
  • Commit the changes
git commit -am "message"
  • Delete the branch
git branch -D master
  • Rename the current branch to master
git branch -m master
  • Finally, force update your reposity
git push -f origin master

git 配置文件

Git 提供了一个叫做 git config 的工具(译注:实际是 git-config 命令,只不过可以通过 git 加一个名字来呼叫此命令。),专门用来配置或读取相应的工作环境变量。而正是由这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:

1./etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 –system 选项,读写的就是这个文件。

2.~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 –global 选项,读写的就是这个文件。

3.当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。

第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录:

$ git config --global user.name "peter" 
$ git config --global user.email peter@example.com 

a. git 查看当前用户的配置

git config –global –list

b. git 查看系统config

git config –system –list

c. git 查看当前仓库的配置

git config –local –list

可以在配置文件里设置忽略filemode, 忽略一些不应该被提交的文件。

类似于这样:

PS: 设置忽略提交文件其他方法

【方式一】

在仓库目录下新建一个名为.gitignore的文件(因为是点开头,没有文件名,没办法直接在windows目录下直接创建,必须通过右键Git Bash,按照linux的方式来新建.gitignore文件)。

.gitignore文件对其所在的目录及所在目录的全部子目录均有效。通过将.gitignore文件添加到仓库,其他开发者更新该文件到本地仓库,以共享同一套忽略规则。

【方式二】

通过配置.git/info/exclude文件来忽略文件。这种方式对仓库全局有效,只能对自己本地仓库有作用,其他人没办法通过这种方式来共享忽略规则,除非他人也修改其本地仓库的该文件。