19年5月16号看了文章,发现写的有点啰嗦,于是重写为 -- [git的配置和基本使用 02]()

因为之前博客有出现删库的操作,打算把博客的内容备份到github中,记录git的使用和出现的问题
2018/11/23更新

Git介绍

Linus方便Linux内核管理而创建的一个版本控制器;

现在常用的版本控制器是SVN/Git,而Git支持分布式管理被广泛使用;

现在的GitHub/Gitlab等是基于Git的网页版本控制器,Gui鼠标点点点;

简单来说就是Git是现在流行的版本控制器,推荐使用。至于Git优点会用才体会到,就不扯了;

本地使用软件

TortoiseGitGitHub Desktop

github四大位置

说明:1.git跟踪(add)本地代码到待提交列表,2.将列表信息提交(commit)到本地仓库,3.本地仓库推送(push)到远程仓库

1. 下载安装git 下载地址

2. git本地的配置--主要是配置用户信息

2.1 生成本地的ssh公钥

命令行操作,输入后一直回车,进入用户根目录下的.ssh目录下的id_rsa.pub文件,复制邮箱前面的代码(公钥)进行绑定

ssh-keygen -t rsa -C    "your_email@youremail.com"

2.2 使用SSH Keys进行绑定(以后提交代码就不用每次都输入用户信息了)

  • 进入github主页setting -- 在出现的页面左侧点击SSH and GPG keys -- 在出现的页面右上角点击New SSH key -- 在出现的页面中填写title(随便)和key(前面复制的公钥信息)

    2.3 检查操作是否成功

    命令行输入--成功则显示:You've successfully authenticated, but GitHub does not provide shell access

    ssh -T git@github.com

    2.4 设置git提交的用户信息(用户名和邮箱)

    git config --global user.name "your_name"
    git config --global user.email "your_email@youremail.com"

    2.5 查看/修改git提交得用户信息(全局使用--global)

    //查看
    $ git config user.name
    $ git config user.email
    //修改
    $ git config user.name "name"
    $ git config user.email "email"

    2.6 关联一个远程仓库并推送到远程主分支

    推荐在github上新建一个仓库而不是改原来已有的仓库名

    git remote add origin git@github.com:yourName/yourRepo.git
    git push -u origin master
#栗子
# 告诉Git你是谁
git config --global user.name "fishhello"
git config --global user.email "2874497884@qq.com"

#关联fishhello账号下的learn库--需要在github自建好learn仓库
git remote add origin git@github.com:fishhello/learn.git

# 选择你喜欢的文本编辑器
git config --global core.editor vim

# 添加一些快捷方式(别名)
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.up rebase
git config --global alias.ci commit

3. 创建本地仓库

3.1 第一种:clone仓库

git clone xxxx.git

3.2 第二种:初始化git本地仓库

git init .

4. git的简单使用

4.1 提交文件代码到暂存区

git add <filename>
git add *

4.2 提交到本地仓库

git commit -m "代码提交信息"

4.3 提交到远程仓库

master是初始的默认分支,可以指定

git push origin master
#第一次使用加一个-u
git push -u origin master

提交到远程仓库出现的问题

这是因为本地的github中我的仓库是原来用的,只改了仓库的名字,里面有文件,导致仓库没有同步

git push origin master
To git@github.com:fishhello/blog.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'git@github.com:fishh ello/blog.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by anothe r repository pushing
hint: to the same ref. You may want to first integrate t he remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push -- help' for details.

一、可以把原来github上指定的仓库删除重建,然后再提交远程仓库
二、可以运行命令把远程仓库与本地的仓库同步,然后再提交远程仓库

git pull --rebase origin master

补充-删除远程文件

git rm <文件>
rm后,跟踪->提交本地->远程

5. 查看工作目录和缓存区的状态

git status

6. 查看已提交到项目历史的信息

#空格键滚动,q键退出,-n指定输出log条数
git log
git log -n 4
#查看记录的每一次命令
git reflog

6. checkout的使用

 6.1 可以查看仓库的旧版本信息(就是你以前的所有提交信息)

#在查看旧版本信息的时候,你需要知道旧版本的id,然后使用 checkout+版本id 查看信息
git log --oneline    //显示:版本id+版本提交时commit的注释
git checkout -b '分支名' de99788(版本id)  //把de99788的提交内容切换成一个新的分支
//这时候命令行使用ls看看(就会显示版本id提交时的内容)
#返回当前的版本
git checkout master

 6.2 如果你只对某个文件感兴趣,你也可以用 git checkout 来获取它的一个旧版本

git checkout de99788 文件名
#如果你不想保留旧的版本,你可以用下面的命令回到到最近的版本
git checkout HEAD 文件名

 6.3 撤销工作区的修改
用本地仓库里的版本替换工作区的版本(也可以在不小心删除工作区的一个文件后用于恢复)

#修改readme.md文件后发现修改错误,需要回到修改前状态
git checkout -- readme.md

 6.4 分支
主分支为master,HEAD指向当前分支 创建与合并分支
创建:把HEAD指向新的分支
合并:把master主分支指向新分支(如果不同分支修改了相同的文件会造成合并冲突,需要手动解决)

#创建并切换到新的分支(切换后用*标出当前分支)
git checkout -b dev
#查看当前分支
git branch
#切换当前分支到master主分支
git checkout master
#合并指定分支到当前分支上(快速合并)
git merge dev
#删除dev分支
git branch -d dev

7. 撤销缓存区中的文件

如果把一个错误的文件add进了缓存区后
可以使用git reset HEAD xxx和git checkout -- xxx 恢复

vim reset1
vim reset2
git add .

#发现reset1有错误,需要取消reset1的缓存
git reset HEAD reset1

#查看信息确认reset1已清出缓存区(绿色),变成modified状态(红色)
git status

#使用checkout清除修改 ------------------------------把文件弄脏后恢复到仓库状态
git checkout -- reset1

8. 从本地仓库中撤销提交(revert、reset)

reset的使用需要谨慎(只能在自用的仓库使用)

 8.1 git revert 在项目历史中增加了一个提交来撤销修改,而不是删除

vim revert
git add revert
git commit -m 'revert test'
#撤销提交命令
git revert HEAD

 8.2 取消最近的提交--版本回退(比如取消最近两次的commit)

git reset --hard HEAD~2
或者
git reset --soft HEAD~1   //柔和的方式撤销最新一次的提交

9. 文件删除

未追踪文件:在工作区的本地代码

#看看有哪些文件需要删除的
git clean -n
#执行删除
git clean -f
#删除不需要文件
git rm xxx  //会把删除记录添加到待提交列表中

10. 比较工作区和本地仓库文件的diff

#以本地仓库中的文件为准,对比工作区:缺少-,增加+
git diff HEAD -- 文件

11. .gitignore(提交时忽略特定文件)

 新建.gitignore与.git目录同级

可以使用通配符,相对路径等指定文件

12. 合并冲突

1.先同步本地仓库
2.冲突原因:修改了同一个文件的同一个地方,造成Git无法自动合并代码
3.把别人的代码上下移动,或(跟造成冲突的同事)沟通后确认后把它删除
4.跟踪提交再走一遍
git pull
xxxx修改
git add
git commit -m 'xx'
git push [origin xx分支]

13. 使用遇到问题

emsp;1.修改git提交用户名(忘了):git config user.name "shafish"

Ref:
https://github.com/geeeeeeeeek/git-recipes/wiki