git介绍
git跟踪文件是按照快照来对比的,每个文件都会有个快照和校验码,git的仓库的内容一般如下.他有三个类型的对象,分别时提交对象,树对象,blob对象,分别存储(提交的信息,树对象的指针,作者邮箱),(记录着文件的目录以及blob对象的索引),(blob则保存着文件的对象)
做些修改后再次提交,那么这次产生的提交对象会包含一个指向上次提交对象(父对象)的指针。
Git 的分支,其实本质上仅仅是指向提交对象的可变指针。 Git 的默认分支名字是 master。 在多次提交操作之后,你其实已经有一个指向最后那个提交对象的 master 分支。 它会在每次的提交操作中自动向前移动。
基本的安装和配置
安装
sudo apt install git
配置文件
/etc/gitconfig 和 ~/.gitconfig
- 配置方法
$ git config --global user.name “John Doe”
$ git config --global user.email johndoe@example.com
$ git config --global core.editor emacs - git config --list查看配置的内容
获取帮助
- git help config
Git基础
获取 Git 仓库
git init //初始化仓库
现在存在一个文件夹.git
结构如下:
-rwxrw-rw- 1 zz zz 888 Apr 28 23:17 GetMac.py
drwxrwxr-x 8 zz zz 4096 Apr 29 17:23 .git
-rwxrw-rw- 1 zz zz 47683 Apr 28 02:00 icon.png
-rwxrw-rw- 1 zz zz 1099 Apr 28 23:26 MacOpen.py
-rwxrw-rw- 1 zz zz 1687 Apr 28 23:26 make_package.py
-rwxrw-rw- 1 zz zz 582 Apr 28 14:53 run.py
-rwxrw-rw- 1 zz zz 749 Apr 28 23:26 send_package.py
-rwxrw-rw- 1 zz zz 4654 Apr 29 12:03 Windown.py
git add *.py //开始跟踪文件
git commit -m 'initial project version'
git clone https://github.com/libgit2/libgit2 //仓库的克隆
记录每次更新到仓库
git status //检查当前的文件状态,git add 是把文件缓存下来,修改过后进行git add那就重新缓存了
添加一个新文件.gitignore,此文件的作用时忽略文件的状态
$ cat .gitignore
*.[oa]
*~
git diff //查看缓存的内容和现在的内容.找出差异
git commit //提交更新,现在的status没有了,直到你再一次进行文件的变动
git rm //从暂存区移除文件
git mv file_from file_to//文件的改名
git log //提交的历史.-p -2显示最后的两条,--stat
撤销操作
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
最终你只会有一个提交 - 第二次提交将代替第一次提交的结果。
取消暂存的文件,比如你执行了git add *
但是你可以取消一些文件
git reset HEAD xxx
git checkout -- CONTRIBUTING.md
撤销对文件的修改
远程仓库的使用
首先得配置ssh的秘钥
$ ssh-keygen -t rsa -C "your_email@youremail.com"
成功的话会在~/下生成.ssh文件夹,进去,打开id_rsa.pub,复制里面的key。
回到github上,进入 Account Settings(账户配置),左边选择SSH Keys,Add SSH Key,title随便填,粘贴在你电脑上生成的key。
$ ssh -T git@github.com查看是否链接成功
然后就是配置文件
$ git config --global user.name "your name"
$ git config --global user.email "your_email@youremail.com"
添加远程地址
$ git remote add origin git@github.com:yourName/yourRepo.git
$ git push origin master 推送
$ git remote -v //远程仓库的查看
$ git remote add pb https://github.com/zylgzz/IpGuet //添加远程仓库的地址
$ git remote add origin git@github.com:yourName/yourRepo.git //添加远程仓库的地址
$ git push origin master //ssh配置了就不用输入账号密码了
$ git push pb master //这样的推送需要密码
$ git fetch origin //抓取后新的项目
git remote show origin //查看远程仓库的更多的信息
$ git remote rename origin paul // 可以讲远程仓库地址更换名字
git remote rm paul //移除远程仓库地址
标签的使用
标签分为轻量标签和附注标签.
git tag v1.4-lw //标签的创建,轻量级
$ git show v1.4-lw //标签的查看
commit 349c285570c79f046c65f3067a3e1e0c6621a67e
Author: zylgzz <zylgcmd@qq.com>
Date: Mon Apr 29 17:42:27 2019 +0800
readme commit
diff --git a/README b/README
new file mode 100644
index 0000000..9db1631
--- /dev/null
+++ b/README
@@ -0,0 +1 @@
+拥有出校器的学校存在一种状态,校方给出的出校器的版本往往是基于windowns的,然而如果使用其他的系统,我们不得不寻找新的方式去替代出校器的联网方式
diff --git a/icon.png b/icon.png
new file mode 100755
index 0000000..2600a06
Binary files /dev/null and b/icon.png differ
git tag -a v1.4 -m 'my version 1.4'
git tag
v1.4
v1.4-lw
git show v1.4
输出显示了打标签者的信息、打标签的日期时间、附注信息,然后显示具体的提交信息
Tagger: zylgzz <zylgcmd@qq.com>
Date: Tue Apr 30 11:08:56 2019 +0800
my version 1.4
commit 349c285570c79f046c65f3067a3e1e0c6621a67e
Author: zylgzz <zylgcmd@qq.com>
Date: Mon Apr 29 17:42:27 2019 +0800
readme commit
diff --git a/README b/README
new file mode 100644
index 0000000..9db1631
--- /dev/null
+++ b/README
@@ -0,0 +1 @@
+拥有出校器的学校存在一种状态,校方给出的出校器的版本往往是基于windowns的,然而如果使用其他的系统,我们不得不寻找新的方式去替代出校器的联网方式
diff --git a/icon.png b/icon.png
new file mode 100755
index 0000000..2600a06
Binary files /dev/null and b/icon.png differ
git tag -a v1.2 9fceb02 //对以前的标签的修改
git tag -d v1.4-lw //标签的删除
git push origin v1.5 //推送标签
git 别名
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status
git 分支
分支的创建
git branch testing
HEAD 指向当前所在的分支,
git checkout testing //分支的切换
分支的具体的操作
现在项目如下
现在因为需要,所以在C2的地方创建一个分支,
$ git checkout -b iss53 ==$ git branch iss53 and $ git checkout iss53
现在有两个分支,且HEADzaiiss53那里
对相关的文件进行修改之后,需要回到master,然后创建了一个新的分支hotfix
git commit iss53
git checkout master
git checkout -b hotfix
现在进行hotfix和master的合并
$ git checkout master
$ git merge hotfix
回到iss53继续操作
$ git checkout iss53
现在讲iss53和master合并
$ git checkout master
$ git merge iss53
因为进行合并了,所以不需要iss53那个分支了,进行删除
git branch -d iss53
合并遇到遇到冲突
$ git status
找打冲突,修改即可
$ git mergetool//图形化界面解决冲突
分支的管理
git branch //可以查看所有的分支
git branch -v //可以查看分支的最后一次的提交
git branch --merged //哪些分支已经合并到当前的分支
git push origin --delete serverfix//删除远程的分支
git branch -vv //查看所有的远程的分支
git checkout --track origin/serverfix//跟踪远程分支
git push origin serverfix //推送分支
官网的参考https://git-scm.com/book/zh/v2