- Git介绍
- git安装连接github教程
- 问题解决
- 版本还原
- Git暂存管理
- 放弃本地某个文件的修改谨慎使用
- 子模块无法提交问题
- 远程库强制覆盖本地库
- GitHub
- Git腾讯云Coding
- 其他扩展功能
- Git常用命令
Git介绍
- svn是集中式,git是分布式
- 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教程
- 填写新仓库名称,备注信息。点击创建即可完成
- 在用户注册主目录(c:\Users\Administrator)下,打开Git Bash,输入命令
1
2cd ~/
ssh-keygen -t rsa -C "fff.ff.com" //123是注册Github的邮箱,直接回车 - 接下来到GitHub上,打开“Account settings”–“SSH Keys”页面,然后点击“Add SSH Key”,填上Title,在Key文本框里粘贴 id_rsa.pub文件里的全部内容
- 验证是否成功,在git bash里输入下面的命令 如果初次设置的话,会出现界面,输入yes 同意即可
1
ssh -T git@github.com
- 开始设置username和email,因为github每次commit都会记录他们
1
2git config --global user.name "name"//你的GitHub登陆名
git config --global user.email "123@123.com"//你的GitHub注册邮箱 - 在本地硬盘比如G盘 创建TechNotes目录
- 进入G:\TechNotes,右键鼠标弹出菜单,选择Git Bash Here
- 初始化
1
git init
- 关联一个远程库命令
1
2git remote add origin git@github.com:myname/example.git //关联一个远程库命令,
git@github.com:myname/example.git 这个是自己远程库,有ssh跟https两种链接类型 - 从服务器拉取工程,拉取最新代码
1
git pull origin master
- 新建一个测试文件hello.txt
git add .
git commit -m 'init'
- 推送master分支
1
2git 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
8makdir ~/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的外观和操作的各个方面。这些变量可以被存储在三个不同的位置:
- /etc/gitconfig 文件:包含了适用于系统所有用户和所有库的值。如果你传递参数选项’–system’ 给 git config,它将明确的读和写这个文件。
- ~/.gitconfig 文件 :具体到你的用户。你可以通过传递–global 选项使Git 读或写这个特定的文件。
- 位于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一下文件即可。然后再commit一下就没有问题了。1
git add FFF.txt //或者 $ git add -A
版本还原
谨慎使用,避免把未提交的变更弄丢失,被还原或者覆盖
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 | $ dir |
远程库强制覆盖本地库
1. git强制覆盖多条
1 | git fetch --all |
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 | git config --global user.name "John Doe" |
腾讯云配置教程:
1 | 步骤一,一路回车 |
使用命令创建仓库
1 | git clone https://git.dev.tencent.com/XXX/xxx.git |
使用命令行推送已存在的仓库
1 | git remote add origin https://git.dev.tencent.com/xxx/xxx.git |
其他扩展功能
忽略本地的工程内文件或目录
在仓库文件夹下面创建.gitignore
的文件,可以提交到公有库中,共享过滤规则。在文件内输入需要过滤的文件规则。比如:
1 | *.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分支推送到远程库对应的远程分支上 |