git操作杂记

===Tangji笔记===================

##git操作
git config --global color.ui true
git merge mybranch (merge from mybranch)
git branch -d mybranch 删除分支
git branch -D mybranch 强制删除分支
git branch 列出所有分支
git branch -v 查看各个分支最后一次提交
git branch –merged 查看哪些分支合并入当前分支
git branch –no-merged 查看哪些分支未合并入当前分支
git fetch origin 更新远程库到本地
git push origin mybranch 推送分支
git merge origin/mybranch 取远程分支合并到本地
git checkout -b mybranch origin/mybranch 取远程分支并分化一个新分支
git push -u origin sean3.5 设置本地分支的默认push分支
git checkout --  src/enterprise/Api/User.php 撤回本地修改
git push origin :mybranch 删除远程分支
git log --name-status 每次修改的文件列表, 显示状态
git log --name-only 每次修改的文件列表
git log --stat 每次修改的文件列表, 及文件修改的统计
git log --after='2019-05-23' --graph --stat
git whatchanged 每次修改的文件列表
git whatchanged --stat 每次修改的文件列表, 及文件修改的统计
git show 显示最后一次的文件改变的具体内容

git tag 查看tag
git tag -a V1.2 -m 'release 1.2' 创建tag
git show V1.2 显示附注信息
git push origin --tags  同步到远程代码库
git tag -d V1.2 删除本地 V1.2的版本
git push origin :refs/tags/V1.2 删除线上版本
git fetch origin tag V1.2 获取远程版本

git diff-tree -r --author='zhangyi' --no-commit-id --name-only fda6e8a83230f6e2bf82fc3eff33eb705d121a33 a93f3b66e047474be18c26b1420110b71151b696
sudo git diff f4710c4a32975904b00609f3145c709f31392140 HEAD --name-only | cpio -pvdmu /var/www/git_update/update_201800001.tar


-- 从版本库中删除指定目录
.gitignore
git rm -r folder_path --cached 命令即可

 

====================================

1. git日志查看
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative
git config --global alias.lg "log --graph --pretty=format:'%Cred%H%Creset @%C(yellow)%d%Creset %n Author: %cn <%_ce> %n Date: %_cd %_Cblue(%cr)%Creset %n %n Commit subject: %Cgreen%s%Creset %n'"


在git提交环节,存在三大部分:working tree, index file, commit
这三大部分中:
working tree:就是你所工作在的目录,每当你在代码中进行了修改,workingtree的状态就改变了。
index file:是索引文件,它是连接workingtree和commit的桥梁,每当我们使用git-add命令来登记后,index file的内容就改变了,此时indexfile就和working tree同步了。
commit:是最后的阶段,只有commit了,我们的代码才真正进入了git仓库。我们使用git-commit就是将indexfile里的内容提交到commit中


git diff:是查看working tree与index file的差别的。
git diff --cached:是查看index file与commit的差别的。
git diff HEAD:是查看workingtree和commit的差别的。(HEAD代表的是最近的一次commit的信息)

 

 

git log --name-status 每次修改的文件列表, 显示状态
git log --name-only 每次修改的文件列表
git log --stat 每次修改的文件列表, 及文件修改的统计
git whatchanged 每次修改的文件列表
git whatchanged --stat 每次修改的文件列表, 及文件修改的统计
git show 显示最后一次的文件改变的具体内容

 
git log --graph --pretty=format:"%h - %an, %ar %s"  查看主线

 

 

根据他的提示,我做了如下操作,

git config --global push.default "current"

 


2.版本回退
$ git reset --hard HEAD^
## git中用HEAD表示当前版本,HEAD^表示上一版本,HEAD^^表示上一版本
HEAD~100表示上100个版本


## 或者直接指定版本号(不用全输,只许前面几位即可)
$ git reset --hard 534688
查看版本号的命令:
$ git reflog

## 如果要单独回退某一个文件,可在最后加上文件名称,但不能加 --hard参数
$ git reset HEAD^ index.txt

 

 

 

 

3. 单个文件废弃
$ git checkout -- index.txt
## 整个工程废弃
$ git checkout -f
## 这个命令会把你工作区中的修改回退到最后一次add命令之前的状态
## 即如果缓存区有内容,则回退到和缓存区一直
## 如果缓存区为空,则回退到和版本库一致

 

4.创建空分支

 


 
$ git checkout --orphan gh-pages

 

$git checkout . // 撤销本地

$git reset . //撤销索引

 

5. git 打标签

git tag -a v1.01 -m "Relase version 1.01"

=-========================================

Git删除暂存区或版本库中的文件


    我们知道Git有三大区(工作区、暂存区、版本库)以及几个状态(untracked、unstaged、uncommited),下面只是简述下Git的大概工作流程,详细的可以参见本博客的其他有关Git的文章
  (1)打开你的项目文件夹,除了隐藏的.git文件夹,其他项目文件位于的地方便是工作区,工作区的文件需要添加到Git的暂存区(git add),随后再提交到Git的版本库(git commit)。
  (2)首次新建的文件都是untracked状态(未跟踪),此时需要git add到暂存区,Git便会在暂存区中生成一个该文件的索引,文件此时处于uncommited状态,需要git commit生成版本库。添加到了版本库之后,再对文件进行修改,那么文件的状态会变为unstaged状态。
 
1 删除错误添加到暂存区的文件
    有时你在工作区新建了文件TestFile,并且已经将它添加到了暂存区,git会告知,现有有一个文件未提交到版本库,如下图:


    1.1 仅仅删除暂存区里的文件    
    此时你想撤销错误添加到暂存区里的文件,可以输入以下命令:
    git rm --cache 文件名
 
    上面的命令仅仅删除暂存区的文件而已,不会影响工作区的文件,如上图,TestFile.txt仍然存在,此时输入下面命令,git会告知有一个未跟踪的文件TestFile.txt。
    git status
 
    1.2 删除暂存区和工作区的文件
    git rm -f 文件名   工作区的文件也被删除了。


2 删除错误提交的commit
    有时,不仅添加到了暂存区,而且commit到了版本库,这个时候就不能使用git rm了,需要使用git reset命令。
    错误提交到了版本库,此时无论工作区、暂存区,还是版本库,这三者的内容都是一样的,所以在这种情况下,只是删除了工作区和暂存区的文件,下一次用该版本库回滚那个误添加的文件还会重新生成。
    这个时候,我们必须撤销版本库的修改才能解决问题!
    git reset有三个选项,--hard、--mixed、--soft。
    //仅仅只是撤销已提交的版本库,不会修改暂存区和工作区
    git reset --soft 版本库ID
 
    //仅仅只是撤销已提交的版本库和暂存区,不会修改工作区
    git reset --mixed 版本库ID
 
    //彻底将工作区、暂存区和版本库记录恢复到指定的版本库
    git reset --hard 版本库ID
    那我们到底应该用哪个选项好呢?
    (1)如果你是在提交了后,对工作区的代码做了修改,并且想保留这些修改,那么可以使用git reset --mixed 版本库ID,注意这个版本库ID应该不是你刚刚提交的版本库ID,而是刚刚提交版本库的上一个版本库。如下图:
    (2)如果不想保留这些修改,可以直接使用彻底的恢复命令,git reset --hard 版本库ID。
    (3)为什么不使用--soft呢,因为它只是恢复了版本库,暂存区仍然存在你错误提交的文件索引,还需要进一步使用上一节的删除错误添加到暂存区的文件,详细见上文。

 

======================================================================

删除本地分支,并重新拉取远程分支复制到本地
1. 删除本地分支


假设想要删除本地的分支temp,并且当前处在temp分支上,首先需要切换到别的分支(假设切换到develop分支):


git checkout develop  //切换到develop分支


git branch  //此时处在develop分支


git branch -D temp  //删除本地temp分支
 


2.重新拉取远程仓库代码,并自动创建分支


git fetch 会将远程代码的更新(commit)拉取到本地。


git fetch origin temp:temp  //拉取远程库temp分支的代码到本地的temp分支,如果不存在temp分支,将自动创建temp分支
git fetch <远程主机名>  //将远程库的更新(commit)拉取到本地
git fetch <远程主机名> <分支名>  //将远程库的<分支名>的分支拉取到本地

 

 

 

 

发布了98 篇原创文章 · 获赞 89 · 访问量 30万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章