目录

git

git

wiki

git 结构

Workspace:工作区 ,可以addindex

Index/Stage:暂存区 ,可以commitRepository

Repository:本地仓库 ,可以pushRemotecheckoutWorkspace

Remote:远程仓库 ,可以pullWorkspacecloneRepository

创建一个本地仓库

选择一个文件夹testgit作为仓库

pwd : /home/kirito/testgit

git init : 已初始化空的 Git 仓库于 /home/kirito/testgit/.git/

上面命令会在目录下生成一个.git/文件夹,不要去动它

在目录下创建一个文件readme.md

cat readme.md : ##test1

git add readme.md : 没有输出,成功把文件加入暂存区,使用git status查看当前状态

提交到本地仓库需要使用git commit readme.md

不过在此之前,需要先设置身份(这其实是第一件要做的事)

git config --global user.email "you@example.com"

git config --global user.name "Your Name"

--global参数表示全局,如果仅在本仓库设置身份标识,则省略 –global 参数。

设置完成后

git commit readme.md -m "提交的备注",也可以不加-m,会让你编辑一个文件提交信息

然后就提交到本地仓库了

如果我们这时候再修改readme.md的内容,然后执行git status

1
2
3
4
5
6
7
8
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

	修改:     readme.md

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

会提示有一个没有缓存的变更,

使用git diff readme.md会打印文件有什么改动,确定改动可以执行git add readme.mdgit commit readme.md

##版本回退 使用git log查看所有版本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
commit 163ba2ae27e4d5408eef9d8dbe0deca8d8c578dc (HEAD -> master)
Author: kirito <1026860069@qq.com>
Date:   Thu Jan 31 19:37:39 2019 +0800

    hahahh

commit 474e3ecbed1d328325537413abf321d56bedf833
Author: kirito <1026860069@qq.com>
Date:   Thu Jan 31 18:14:16 2019 +0800

    2cm

commit 0885da8a228a626322f34e60c288c33b3871dfa3
Author: kirito <1026860069@qq.com>
Date:   Thu Jan 31 18:12:26 2019 +0800

    test commit 1

head指向的是当前版本,如果想回退到上一个版本

git reset --hard HEAD^

回退到上上个git reset --hard HEAD^^,上上上个git reset --hard HEAD^^^…..

回退到上100个git reset --hard HEAD~100

你会发现回退过后。git log里面就没有以前的记录了,

如果后悔了,执行git reflog找到以前版本的版本号,使用版本号回退到你想要的版本

git reset --hard 版本号

##远程仓库

本地Git仓库和github仓库之间的传输是通过SSH加密的

创建ssh key,在~/.ssh目录下

ssh-keygen -t rsa –C “youremail@example.com”

id_rsa是私钥,id_rsa.pub是公钥

登陆你的github设置添加sshkey,复制公钥,创建

完成后再github上创建一个新的仓库,

他会提示可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。我们使用后者。

git remote add origin https://github.com/zshorz/testgit.git

git push -u origin master

如果出现remote: error: GH007: Your push would publish a private email address.

进入你github setting email,把 keep my email address private 的勾去掉

使用https地址每次都有输入密码,可使用ssh方式git@github.com:zshorz/testgit.git

##创建合并分支

HEAD实际上指向的是分支,以上都只有一个分支master主分支。

使用git checkout -b newline创建并切换到新分支

或者git branch newline git checkout newline

使用git branch会列出所有分支,前面带*号的是HEAD的指向,即当前分支

在一个分支上做改动不会影响另一个分支

git merge <name> 合并指定分支到当前分支

把newline合并到master上并删除newline

git checkout master

git merge newline

git branch -d newline

通常合并分支时,git一般使用”Fast forward”模式,在这种模式下,删除分支后,会丢掉分支信息,现在我们来使用带参数 –no-ff来禁用”Fast forward”模式。首先我们来做demo演示下:

##分支切换问题

当你在一个分支工作时,不得不切换到另一个分支去,但你当前分支的工作没有完成,你不想提交他们,就可以使用git stash储藏工作目录状态

git stash save "some message"

在需要的时候git stash pop恢复工作,帮助git stash -h

##远程仓库

分支推送

git push origin <name>

创建新分支并跟踪远程分支

git checkout –b dev origin/dev

删除远程分支

git push origin <name>