#Git的概念:
- 分为工作区、暂存区、仓库(如编辑配置表,保存本地配置表,上传到svn)
- 工作区到暂存区用add(添加)
- 暂存区到仓库用commit(提交)
- git和svn的区别:git向上提交的是文件的修改,而非文件。SVN向上提交的是文件。例如:配置表内删除item.txt后要进行提交,git可以git add item.txt 而svn只能是在item.txt的所在文件夹,针对文件夹进行提交操作。
# Git安装
- 官网下载:https://git-scm.com/downloads
- 如遇下载中断可下载https://pan.baidu.com/s/1o_EybVySxjpw3chhpycxjQ
- windows : 下载后双击安装
- Linux:原则上可以从官网下载安装
- MacOS: 官网上下载dmg安装文件,双击
# Git基本使用
- git默认路径是C盘,如果C盘容量不足,可以更改至其他盘,如果已经在C盘创建了本地仓库,可以先删除.git文件,再删除其余文件夹。
在git文件目录下输入命令,删除本地仓库: find . -name ".git" | xargs rm -Rf
cd 创建了.git的文件夹
git branch #显示所有本地分支
git init #初始化本地版本库
$ ls -a #找到目录下.git
rm -rf .git #删除
可以看到master分支已经删除(test1中隐藏的.git文件夹已经删除)
删除git之后,再返回去删除本地的库文件夹即可
- 创建仓库命令 git init
mkdir 文件夹名称 : 创建文件夹
cd 文件夹名称:进入文件夹
ll -a ./文件夹名称:显示文件夹里的文件
touch one.txt :创建one.txt文件
vi 文件夹名称 :打开文件
esc -> :wq :编辑文本文件下退出文件
cat one.txt : 查看one.txt文件内容
ls : 查看当前文件夹下的文件
- git add : 向暂存区添加内容,如git add one.txt 把one.txt文件添加到暂存区
可能会被提示warning: LF will be replaced by CRLF in readme.txt.The file will have its original line endings in your working directory.
解决方法:再次输入 git add 文件名+空格+回车
- git commit : 向仓库提交内容,如git commit one.txt 把one.txt文件提交到仓库
提交时首行需要填写注释信息,如 add by who, 2 files, one.txt and two.txt
- git commit -m "注释信息” : 如此也可直接一步提交
- git status : 显示git当前状态,工作树、暂存区、本地版本库的对比
- git rm : 删除信息
- rm 文件名 :删除工作区内的该文件
- git rm 文件名 : 删除暂存区内的该文件
- git log : 查看日志
- git reset --hard 版本号 : 版本回滚
- github简介
- git remote add : 添加内容到远程暂存区
- git push : 移入远程仓库
- git remote remove <远程库名称> :移除远程仓库,实例,git remote remove origin
- git的撤销修改
- git checkout -- <文件名> : 把工作区的修改撤销掉,将工作区的版本回退到暂存区的版本或本地版本库的版本(当暂存区没有该文件的新版本时)。
- git reset HEAD <文件名> : 把暂存区的修改撤销掉。
- git reset --hard <版本号> : 把本地版本库里的版本回退到某一个版本。
# 远程仓库
- git remote add origin <远程库地址> : 本地版本库关联远程库 。
- git push -u origin master : 第一次推送master分支的所有内容。(推送时显示no tracking information说明本地分支和远程分支的链接关系没有创建)
- git push origin master : 推送本地master分支的最新修改。
- git clone <远程库地址> : 从远程库里克隆一份到本地版本库
- git remote : 查看远程库名称
- git remote -v : 查看更详细的远程库信息,其中fetch代表可以抓取的地址,push代表可以推送的地址。如果没有推送权限,就看不到push的地址。
- git push origin master : 推送master分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上。分支是否推送远程库取决于多人协作中,其他人是否要与你公用该分支。
- git pull : 当git push失败时,git pull(抓取远程该分支的最新提交),解决完冲突再推送。
- git checkout -b <本地分支名> origin/<远程分支名> : 在本地和远程创建对应的分支,本地和远程分支的名称最好一样。
- git branch --set-upstream <本地分支名> origin/<远程分支名>,建立本地分支和远程分支的关联。
####解决push时遇到的问题####
#git使用https和ssh协议的区别:
HTTPS:不管是谁,拿到url随便clone,但是在push的时候需要验证用户名和密码;
SSH:clone的项目你必须是拥有者或者管理员,而且需要在clone前添加SSH Key。SSH 在push的时候,是不需要输入用户名的,如果配置SSH key的时候设置了密码,则需要输入密码的,否则直接是不需要输入密码的。
#ssh key 公钥相关问题:
- cd ~/.ssh : 检查电脑是否已存在ssh key
- ssh-keygen -t rsa -C "注册github时认证过的邮箱" : 生成ssh key
生成完秘钥后,会在 C:\Users\Administrator\.ssh 目录下 id_rsa和id_rsa.pub 两个文件,用记事本打开id_rsa.pub,全选复制到github主页setting——SSH and GPG keys界面的 New SSH key栏里。
问题:ssh_dispatch_run_fatal
解决方法:先打开cmd,ping一下显示的IP(192.30.253.112)看能否接通,若能则关闭防火墙。
问题:

解决办法:https://blog.csdn.net/zhoucheng05_13/article/details/52831703
# git的分支管理
- git分支的创建、删除与合并:
- git checkout -b <分支名> : 创建分支并切换到新分支
- 这步操作等同于分别执行创建和切换,git branch <分支名> (创建分支),git checkout <分支名> (切换分支)。
- git merge <分支名> : 将<分支名>这个分支合并到当前分支
- git branch -d <分支名> : 删除分支
- git branch : 查看所有分支
- git log --pretty=oneline(简化日志)
- git log --graph --pretty=oneline --abbrev-commit(查看分支的合并情况)
- git merge --no-ff -m "备注信息" <分支名> : --no-ff参数表示禁用Fast forward,本次合并要创建一个新的commit,所以要加上-m参数。禁用Fast forward可以从分支历史上看出分支信息。合并时git会用Fast forward模式(如果可行的话),该模式下删除分支后,会丢失分支信息。
- bug分支 (应用场景:当在分支上工作到一半,发现要尽快修改另一分支上的一个bug时)
- git stash : 保存当前工作场景
- 恢复所保存的工作场景
- git stash apply : 恢复后,stash内容不删除。
- git stash list : 查看stash列表。
- git stash pop : 恢复后,一并删除stash内容。
有多次stash的情况下,恢复的时候,先用git stash list 查看,然后恢复指定的stash,命令:git stash apply stash@{X}
- git branch -D <分支名> : 强行删除一个没有被合并过的分支。
# 备注
- 所有的版本都放在git文件夹内
- 在将文件提交到仓库之前要先填写用户名和邮箱(分为全局和本目录)
- 设置全局用户名和邮箱操作命令如下:
git config --global user.name "用户名"
git config -- global user.email "邮箱"
- 查看用户名和邮箱命令如下:
git config user.name
git config user.email
- 修改本目录下仓库的用户名和邮箱
git config user.name "用户名"
git config user.email "邮箱"
- 查看本目录下仓库的用户名和邮箱
git config user.email
git config user.name
- 提交
- 提交的时候首行不能为空,需填写注释信息
- 提交后返回的结果如下:
[master 744ef68] add by icev5 at 2.th //master叫分支,744ef68是版本号,add by icev5 at 2.th是提交的注释信息
2 files changed, 2 insertions(+) //2个文档已修改,插入了2次
- VI编辑器是Linux下用的最多也是功能最强大的文本编辑器,VI具有三种模式:命令模式、编辑模式以及末行模式,在最初使用VI打开一个文件的时候,处在命令模式下,这时使用命令i、I、a、A、o、O都可以进入编辑模式,而想放回到命令模式只需要在编辑模式下敲击ESC键即可
- :w 保存修改
:wq 保存修改并退出vi
:q! 不保存修改并退出vi
:wq! 不保存修改并退出vi(文件所有者忽略文件的只读属性)
- git remote set-url origin [git@github.com:username/repository.git 或 https://github.com/username/repository.git] : 切换ssh和http协议,使用https除了速度慢之外,而且每次推送都需要输入口令。
- git 分支的操作(创建、合并、删除)都非常快,只是切换指针而已,所以鼓励多使用分支,在分支上修改,然后再进行合并,提高安全性。
- git的教程详阅 https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
- git-cheatsheet(操作命令备忘录):https://pan.baidu.com/s/1ZMPLAYc3t6VY2RZTqIUa6g
浙公网安备 33010602011771号