Git介绍

Git介绍

  1. svn是集中式,git是分布式
  2. github会保存本地git的所有操作记录

git与svn的区别:

  • git是分布式
  • Git下载下来后,在OffLine状态下可以看到所有的Log,SVN不可以
  • 克隆一份全新的目录以同样拥有五个分支来说,SVN是同时复制5个版本的文件,也就是说重复五次同样的动作。
  • 版本库(repository):SVN只能有一个指定中央版本库
  • 分支(Branch)在SVN,分支是一个完整的目录。且这个目录拥有完整的实际文件。而 Git,每个工作成员可以任意在自己的本地版本库开无限个分支。
  • 提交(Commit)在SVN,当你提交你的完成品时,它将直接记录到中央版本库。当你发现你的完成品存在严重问题时,你已经无法阻止事情的发生了。如果网路中断,你根本没办法提交!而Git的提交完全属于本地版本库的事情。而你只需推(git push)到主要版本库即可。Git的推其实是在执行同步(Sync)
  • Git的内容的完整性要优于SVN: GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
  • Git把内容按元数据方式存储,而SVN是按文件
  • Git对于每一次提交,通过对文件的内容或目录的结构计算出一个SHA-1 哈希值,得到一个40位的十六进制字符串,Git将此字符串作为版本号。所有保存在Git 数据库中的数据都是用此40位的哈希值作索引的,而不是靠文件名。SVN 的版本号是连续的,可以预判下一个版本号,而 Git 的版本号则不是
  • Git中有暂存区域(stage)
  • Git的授权做不到Subversion那样精细
  • Git支持离线工作,速度快、灵活,代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息

git安装连接github教程

  1. 填写新仓库名称,备注信息。点击创建即可完成
  2. 在用户注册主目录(c:\Users\Administrator)下,打开Git Bash,输入命令
    1
    2
    $ cd ~/
    $ ssh-keygen -t rsa -C "fff.ff.com" //123是注册Github的邮箱,直接回车
  3. 接下来到GitHub上,打开“Account settings”–“SSH Keys”页面,然后点击“Add SSH Key”,填上Title,在Key文本框里粘贴 id_rsa.pub文件里的全部内容
  4. 验证是否成功,在git bash里输入下面的命令
    1
    $ ssh -T git@github.com
    如果初次设置的话,会出现界面,输入yes 同意即可
  5. 开始设置username和email,因为github每次commit都会记录他们
    1
    2
    $ git config --global user.name "name"//你的GitHub登陆名
    $ git config --global user.email "123@123.com"//你的GitHub注册邮箱
  6. 在本地硬盘比如G盘 创建TechNotes目录
  7. 进入G:\TechNotes,右键鼠标弹出菜单,选择Git Bash Here
  8. 初始化
    1
    $ git init
  9. 关联一个远程库命令
    1
    2
    $ git remote add origin git@github.com:myname/example.git //关联一个远程库命令,
    git@github.com:myname/example.git 这个是自己远程库,有ssh跟https两种链接类型
  10. 从服务器拉取工程,拉取最新代码
    1
    $ git pull origin master
  11. 新建一个测试文件hello.txt
  12. git add .
  13. git commit -m 'init'
  14. 推送master分支
    1
    2
    $ git push -u origin master //关联后,第一次推送master分支的所有内容命令,此后,每次本地提交后,
    就可以使用命令git push origin master推送最新修改

问题解决

  • 如果输入$ git remote add origin git@github.com:fff(github帐号名)/demo(项目名).git

    提示出错信息:fatal: remote origin already exists.

    解决办法如下:

    1、先输入$ git remote rm origin

    2、再输入$ git remote add origin git@github.com:fff/demo.git 就不会报错了!

    3、如果输入$ git remote rm origin 还是报错的话,error: Could not remove config section ‘remote.origin’. 我们需要修改gitconfig文件的内容

    4、找到你的github的安装路径

    5、找到一个名为gitconfig的文件,打开它把里面的[remote “origin”]那一行删掉就好了!

    如果输入$ ssh -T git@github.com
    出现错误提示:Permission denied (publickey).因为新生成的key不能加入ssh就会导致连接不上github。

    解决办法如下:

    1、先输入$ ssh-agent,再输入$ ssh-add ~/.ssh/id_key,这样就可以了。

    2、如果还是不行的话,输入ssh-add ~/.ssh/id_key 命令后出现报错Could not open a connection to your authentication agent.解决方法是key用Git Gui的ssh工具生成,这样生成的时候key就直接保存在ssh中了,不需要再ssh-add命令加入了,其它的user,token等配置都用命令行来做。

    3、最好检查一下在你复制id_rsa.pub文件的内容时有没有产生多余的空格或空行,有些编辑器会帮你添加这些的。
    如果输入$ git push origin master

    提示出错信息:error:failed to push som refs to …….

    解决办法如下:

    1、先输入$ git pull origin master //先把远程服务器github上面的文件拉下来

    2、再输入$ git push origin master

    3、如果出现报错 fatal: Couldn’t find remote ref master或者fatal: ‘origin’ does not appear to be a git repository以及fatal: Could not read from remote repository.

    4、则需要重新输入$ git remote add origin git@github.com:jianpenglin/demo.git

  • 使用git在本地创建一个项目的过程
    1
    2
    3
    4
    5
    6
    7
    8
    $ makdir ~/demo    //创建一个项目demo
    $ cd ~/demo //打开这个项目
    $ git init //初始化
    $ touch README
    $ git add README //更新README文件
    $ git commit -m 'first commit' //提交更新,并注释信息“first commit”
    $ git remote add origin git@github.com:fff/demo.git //连接远程github项目
    $ git push -u origin master //将本地项目更新到github项目上去

gitconfig配置文件
Git有一个工具被称为git config,它允许你获得和设置配置变量;这些变量可以控制Git的外观和操作的各个方面。这些变量可以被存储在三个不同的位置:

  1. /etc/gitconfig 文件:包含了适用于系统所有用户和所有库的值。如果你传递参数选项’–system’ 给 git config,它将明确的读和写这个文件。
  2. ~/.gitconfig 文件 :具体到你的用户。你可以通过传递–global 选项使Git 读或写这个特定的文件。
  3. 位于git目录的config文件 (也就是 .git/config) :无论你当前在用的库是什么,特定指向该单一的库。每个级别重写前一个级别的值。因此,在.git/config中的值覆盖了在/etc/gitconfig中的同一个值。在Windows系统中,Git在$HOME目录中查找.gitconfig文件(对大多数人来说,位于C:\Documents and Settings$USER下)。它也会查找/etc/gitconfig,尽管它是相对于Msys 根目录的。这可能是你在Windows中运行安装程序时决定安装Git的任何地方。

检查你的设置(Checking Your Settings)

1
$ git config --list

你也可以查看Git认为的一个特定的关键字目前的值,使用如下命令 git config {key}:

1
$ git config user.name

例如,你可以运行如下命令获取对config命令的手册页帮助:

1
$ git help config

  • nothing added to commit but untracked files present
    这是git没有把提交的文件加载进来,但是把需要提交的文件都列出来了,只需要用git add XXX(文件名) 把需要提交的文件加上 ,然后git commit -m “xx”,再git push -u origin master重新提交就可以了
  • git commit 失败”Untracked files,Changes not staged for commit” 问题的解决
    也就是说,这个文件在commit之前需要先把文件放入暂存区。只需要在commit之前add一下文件即可。
    1
    $ git add FFF.txt   //或者 $ git add -A  
    然后再commit一下就没有问题了。

版本还原

谨慎使用,避免把未提交的变更弄丢失,被还原或者覆盖

git revert HEAD 撤销前一次 commit

git revert HEAD^ 撤销前前一次 commit

git revert commit-id (比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)撤销指定的版本,撤销也会作为一次提交进行保存。git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容

git reset <file> 从暂存区恢复到工作文件

git reset -- . 从暂存区恢复到工作文件

git reset --hard 恢复最近一次提交过的状态,即放弃上次提交后的所有本次修改,小心使用

git checkout . 丢弃工作区的修改,指定文件git checkout -- readme.txt

Git暂存管理

git stash 暂存

git stash list 列所有stash

git stash apply 恢复暂存的内容

git stash drop 删除暂存区

放弃本地某个文件的修改谨慎使用

git checkout 文件名

git checkout // 放弃所有文件的所有修改

git reset –hard 版本号 // 返回到某个版本,放弃所有修改

子模块无法提交问题

fatal: in unpopulated submodule 'themes/hexo-theme-next' 报错,去除子模块重新提交。如果想保持子模块,参考官方关于git 子模块操作的操作文档

1
2
3
4
$ dir
hexo-theme-next landscape
$ git rm -r --cached hexo-theme-next/
$ git commit -m 'hexo-theme-next提交'

远程库强制覆盖本地库

1. git强制覆盖多条

1
2
3
git fetch --all
git reset --hard origin/master
git pull

2. git强制覆盖本地命令单条

1
git fetch --all && git reset --hard origin/master && git pull

GitHub

git remote -v # 查看远程服务器地址和仓库名称

Git腾讯云Coding

登录后通过加号小图标创建项目,再代码浏览里面可以看到使用介绍,并且提供SSH与HTTPS路径的复制功能。通过个人设置设置public key,还有密码信息

可以使用https或者ssh形式,配置ssh公钥就可以使用ssh形式

1
2
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com

腾讯云配置教程:

1
2
3
4
5
6
7
# 步骤一,一路回车
ssh-keygen -m PEM -t rsa -b 4096 -C "your.email@example.com"( 您的邮箱)
# 步骤二:到我的文档下 ~/.ssh 目录 id_rsa.pub 文件内容拷贝到Coding平台里面SSH公钥中,输入密码完成添加
# 步骤三:执行测试命令。
ssh -T git@e.coding.net
# 步骤四:下载工程,再项目概览中选择ssh地址
git clone git@e.coding.net:xxx/xxx.git

使用命令创建仓库

1
2
3
4
5
6
git clone https://git.dev.tencent.com/XXX/xxx.git
cd xxx
echo "# xxx" >> README.md
git add README.md
git commit -m "first commit"
git push -u origin master

使用命令行推送已存在的仓库

1
2
git remote add origin https://git.dev.tencent.com/xxx/xxx.git
git push -u origin master

其他扩展功能

忽略本地的工程内文件或目录

在仓库文件夹下面创建.gitignore的文件,可以提交到公有库中,共享过滤规则。在文件内输入需要过滤的文件规则。比如:

1
2
3
*.log
/log
log/

简单说明:

  • log/ 忽略当前路径下的log文件夹
  • /log 忽略根目录下的log文件或文件夹
  • *.log 忽略所有.log结尾的文件

Git常用命令

命令 说明
mkdir XX (创建一个空目录 XX指目录名)
pwd 显示当前目录的路径。
git init 把当前的目录变成可以管理的git仓库,生成隐藏.git文件。
git add XX 把xx文件添加到暂存区去。
git commit -m “XX” 提交文件 –m 后面的是注释。
git status 查看仓库状态
git diff XX 查看XX文件修改了那些内容
git log 查看历史记录
git reset –hard HEAD^ 或者git reset –hard HEAD~ 回退到上一个版本(如果想往回退10个版本,使用git reset –hard HEAD~10)或者回退到指定版本git reset –hard (commitid)
cat XX 查看XX文件内容
git reflog 查看历史记录的版本号id
git checkout – XX 把XX文件在工作区的修改全部撤销。
git rm XX 删除XX文件
git remote add origin https://github.com/ff/testgit.git 关联一个远程库
git push -u(第一次要用-u 以后不需要) origin master 把当前master分支推送到远程库
git clone https://github.com/ff/testgit.git 从远程库中克隆
git checkout -b dev 创建dev分支 并切换到dev分支上
git branch 查看当前所有的分支
git checkout master 切换回master分支
git merge dev 在当前的分支上合并dev分支
git branch -d dev 删除dev分支
git branch name 创建分支
git stash 把当前的工作隐藏起来 等以后恢复现场后继续工作
git stash list 查看所有被隐藏的文件列表
git stash apply 恢复被隐藏的文件,但是内容不删除
git stash drop 删除文件
git stash pop 恢复文件的同时 也删除文件
git remote 查看远程库的信息
git remote -v 查看远程库的详细信息
git push origin master Git会把master分支推送到远程库对应的远程分支上