且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

git常用操作

更新时间:2021-12-23 12:36:10

git的核心思想是:


工作区  暂存区 分支仓库


工作区 暂存区是全局的,和分支无关的!


分支切换只是改变commitID而已。 内容即也是更改在分支版本库中的


HEAD指向,MASTER 指向, 分支指向的产物。


1 克隆一个git仓库的开发项目

1
git clone <git url>



给自己的仓库命名和配置邮箱选项(这个可以省去,但是系统会提示自动给你分配用户和邮箱,还是自己设定一下吧)


1
2
git config --global user.name "andy"
git config --global user.email "735896273@qq.com"


如果没有设置,系统会将你系统的用户名(root)和root@主机名作为邮箱

2 在该目录下苍创建文件,创建文件后要add commit的常用操作

1
2
git add <youfile>
git add .

git commit -m "提示标记信息"


3 要查看状态

1
2
3
git status
git log -p -2  # 查看最近两次详细修改内容的diff,以patch补丁形式查看
git remote -v


4 发现不对要撤销

1
2
git checkout <your file>
git checkout .
1
2
git reset <youfile>
git reset .


5 如果有分支

查看分支信息

1
2
git branch
git branch -v

新建分支

git branch <new branch>

删除分支

git branch -d <you branch>

强制删除 

git branch -D <you branch>

6 提交到远程

1
git push origin master


7 常用工具

1
git mergetool

对比工作区和stage区的文件差异

1
git diff


8 回滚

方法一:

找到你要回滚的版本

1
git log --pretty=oneline   和 git log --oneline差不多

回到指定的版本号

1
git reset --hard a7a84e6547626f304efa2067b568f4077998030f


同步远程仓库

1
push push origin master -f



方法二:

直接切回指定的版本号:(游离态)

1
git checkout a7a84e6547626f304efa2067b568f4077998030f


切回master

1
git checkout master



克隆一个分支到本地,本地会有一个git的项目目录

git clone <git url>

git remote -v

git status

git remote add ops15 ops@10.59.76.15:/home/ops/ops_controller

git add .   

git add -A

git add youfile

git stash

git diff

git log -p

git log -p -2

git mergetool

git branch 

git checkout

git pull origin master

git push origin master

git rm filename (等于 rm filename  git rm filename) 

git mv filename(等于 mv filename  git mv filename)


撤销工作区的所有修改

git checkout .

撤销工作区的指定文件的修改

git checkout <youfile>


撤销所有的stage区域 到工作区

git reset .


查看所有分支

git branch

删除指定分支

git branch -d <you branch>

查看各个分支的提交状况

git branch -v

创建新分支

git branch <new branch>




【重点理解--状态】

git status -s 简短形式查看状态

M 第一列字符含义,版本库和暂存区状态有差异

M 第二列字符含义,工作区和暂存区有差异

?? 新文件,未被跟踪的文件


1 修改能不能直接提交? "不可以"

2 git diff   工作区和暂存区的比较

 git diff HEAD 工作区和HEAD比较

 git diff --cached 暂存区和HEAD的比较


3 将工作区的内容暂存起来--搁置问题,是各分支共享的。

git stash

git stash pop

git stash list


【重点理解-对象】

git对象

$ git log --pretty=oneline

$ git log --pretty=short --graph 

$ git log --pretty=short --graph 5c2004ee59ec0ba88715caa779853078e4b4546d

git log --pretty={raw|oneline|short} --graph 提交的版本




sha1sum 算法

head 永远指向所在分支


#查看仓库中的对象类型 大小 内容

git cat-file -t sha1ID

git cat-file -s sha1ID

git cat-file -p sha1ID

git-cat-file - Provide content or type and size information for repository objects


-t 查看对象的类型

-s 查看对象的大小

-p 查看对象的内容


类型:

commit

tree

parent

blob


以下四中表达方式是一样的:

git log -1    #简写查看一条log记录

git log -1 head   #查看head指向的第一条记录

git log -1 master  #查看master中的第一条记录

git log refs/heads/master   #查看master中的第一条记录



git cat-file blob head:test.txt   #查看head指向的blob中test.txt中的文件内容


【重点理解-重置】

git重置(reset)  (head可上可下就 游标的修改)


git reset

git reflog

git reflog show master

git reflog head


如果修改某一个文件(没有git add, (已经被跟踪了的文件)),想撤销这次修改(确定没有作用的文件)

git checkout filename or /dir/


如果修改某一个文件(git add过,已经暂存在暂存区),想要撤销这次修改

git reset filename

git reset .


(git reset {--soft|--hard})  重置引用

如果已经修改某几个文件,但是想撤销到某个版本(本地版本库回到要撤销到的版本),但是当前暂存区,工作区不想撤销

git reset --soft commitid

此时git diff head会变化


如果修改了某几个文件也被提交暂存区了,想撤销到某个commit(工作区和暂存区都改变),回到一个干净的状态(git status 工作区 暂存区 版本库是和commitID中的内容一致)

git reset --hard commitid


如果想撤销到某个commit,且将暂存区同步为某个commit中的内容,但是工作区不变

git reset --maxed commitID = git reset commitID


git log和git reflog的区别:

git log只查看提交到版本库的记录

git reflog 查看所有commit 或者 reset的记录 包括已经被删除的commit记录


阅读; git commit --amend 修补提交



【重点理解--checkout检出】

切换到游离状态


分离头指针(checkout 切换的是指定的commitID 而不是分支)

git checkout commitid

git branch

git reflog

git merge commitID

git log --pretty=oneline --graph  #此时会看到merge游离的状态图示


切换分支的检出


master

 commit 0b62718c50c903e3e7f6a49ced2dbffa28a9b7e9

dev

commit 0bf0d2df146f5a04aa2ae5a56ab46a54c6456893


从dev切换到master 在git merge dev====> 在log中算是一个commit提交。 git log -1   git log --pretty=oneline --graph


commit 0bf0d2df146f5a04aa2ae5a56ab46a54c6456893



【命令区别】

git add .  和  git add -A 的区别


git add . 是将本路径下所有修改的文件和新的文件 add到暂存区(非本路径及本路径下的目录文件 是不会被add到暂存区的。)

git add -A 是将本路径下所有修改的、新增的、删除的 更新到暂存  相当于执行(git add . git rm .)




【仓库和裸仓库的区别】

裸仓库是一个不含有工作目录的仓库(不能执行git status的)。

初始化裸的仓库

1. git clone --bare 远程仓库 目录.git

克隆一个参考到一个裸目录(参考)


2.git init --bare 目录.git

将目录仓库为一个裸仓库


查看远程仓库的信息

git ls-remote 远程仓库  ?


删除与远程库的关联

git remote rm <name>

如:

git remote rm origin

本文转自残剑博客51CTO博客,原文链接http://blog.51cto.com/cuidehua/1783912如需转载请自行联系原作者

cuizhiliang