Git 简介
- 一个开源的分布式版本控制系统
- 版本控制?比如我在
A1
,A2
,A3
,A4
处分别修改了文件,那我可以随时随地回到任意AX
处
Git 安装和配置(windows)
- 下载安装exe,官网太慢,所以建议用淘宝镜像
- 安装完毕,找到
Git -> Git Bash
,打开 - 全局配置用户名和邮箱
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
- 局部配置把
--global
去掉即可
Git 的 工作区 、 暂存区、 master
工作区即打代码的地方,暂存区又叫stage,index用来暂时存放工作区中修改的内容,就是一个中转站,master是项目主分支,HEAD是指针
我最常用的命令
git add .
git commit -m 'update'
git push origin master
git fetch origin master
如果 fetch 合并远程库报错,提示 error: Your local changes to the following files would be overwritten by merge
说明文件有改变,解决:
- 如果想改变本地库,保留远程库,执行
$ git reset --head
,彻底回退上一个版本,使用$ git pull
将远程库覆盖本地库 -
(未测试过)如果想保留远程库的修改,只将本地库的新内容添加至远程库,执行
$ git stash,$ git pull,$ git stash pop
Git 常用命令
文件夹中打开Git方式: 文件夹中右键 -> Git Bash Here
-
初始化
-
$ git init
初始化,将这个目录变成Git可管理的仓库 ,.git文件夹 - 用来跟踪管理版本库 - 注 windows系统自带的记事本在开头添加了0xefbbbf字符(16进制字符),所以网页打开第一行可能会显示一个 '?' ,所以能不用尽量别用
-
-
增加、删除文件
-
$ git add [file1] [file2]
添加指定文件到暂存区 -
$ git add [dir]
添加指定目录到暂存区 ( 包括子目录 ) -
$ git add .
添加修改和新建的文件到暂存区,但不包括被删除的文件 -
$ git add -u
更新所有变化的文件,即提交工作区所有变化的文件到暂存区 -
$ git add -A
提交已被修改和已被删除的文件,但不包括新的文件 -
$ git rm [file1] [file2]
删除工作区文件,并把它放入暂存区 -
$ git rm --cached [file]
停止跟踪指定文件,该文件在工作区位置不变 -
$ git mv [file] [file-rename]
重命名文件,并把改名操作放入暂存区
-
-
提交
-
$ git commit [file1] [file2] -m "message"
提交暂存区中指定文件到仓库中 -
$ git commit -m "message"
提交暂存区所有内容至仓库中 -
$ git commit -a
提交工作区自上一次commit以后的变化文件,至仓库中 -
$ git commit --amend -m "message"
用新的commit,替代上一次提交和提交信息 -
$git commit -v
提交时显示diff(文件差异)信息
-
-
分支
-
$ git branch
显示分支列表和当前分支(带*
号的) -
$ git branch -a
显示本地分支列表和远程分支列表和当前分支(带*
号的) -
$ git branch [branch]
新建分支 -
$ git checkout [branch]
切换分支 -
$ git checkout -b [branch]
新建并切换分支 -
$ git checkout -
切换至上一个分支 -
$ git merge [branch]
合并指定分支到当前分支 -
$ git merge --no-ff -m "message" [branch]
用普通模式合并,合并后的历史中有分支信息,而fast forward ( 默认 ) 合并在历史中是看不出曾经做过合并 -
$ git branch -d [branch]
删除一个分支 -
$ git rebase
作用 : 使提交历史干净,整洁
-
合并分支时,如果没有文件冲突可正常合并,如果有冲突文件(比如两个一样的),Git会告诉我们,Automatic merge failed; fix conflicts and then commit the result
文件合并冲突,必须手动解决以后再提交,这时在Git会在文档中用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,,修改时注意他们只能留一个,箭头和等号要删除。然后提交,合并完成。
- 撤销
-
$ git checkout [file]
撤掉暂存区指定文件到工作区 -
$ git checkout .
撤销暂存区所有文件到工作区 -
$ git reset [file]
重置暂存区指定文件,与上一次commit一致,但工作区不变 -
$ git reset --hard
重置暂存区与工作区,与上一次commit一致 -
$ git reset --hard [HEAD]
回退到某个版本,同时也会重置暂存区和工作区,HEAD代表指针,其值可以是,HEAD^
上一个版本,HEAD^^
上两个版本, ... ,HEAD~100
上100个版本,或者指定版本号8817bcf
-
$ git stash
用于保存工作进度,暂存区和工作区的改动将保存起来,当前将是一个干净的工作区,比如用于修复bug时,把文件先保存起来,这时可以在另外的分支或当前分支处理bug -
$ git stash list
查看stash队列 -
$ git stash apply
恢复队列中第一个记录$ git stash drop
删除stash里的内容$ git stash pop
恢复并stash里的内容 -
$ git stash apply [stash]
恢复指定的记录,可以在列表中查看,比如:stash@[0]
,把apply
换成pop
可以恢复并删除
-
当你改乱了工作区某个文件时,想要撤销修改可使用 $ git checkout [file]
当你不但改乱了工作区某个文件,还添加到了暂存区时,想要撤销时分两步,重置暂存区文件 $ git reset [file]
,撤销工作区修改$ git checkout [file]
,或者一步到位重置暂存区与工作区 $ git reset --hard
当你改乱了,还添加到暂存区,还提交到仓库了,想要撤销需要使用版本回退,比如回退到上一个版本 $ git reset --hard HEAD^
-
查看信息
-
$ git status
获取仓库当前状态 -
$ git log
查看当前分支的版本历史 -
$ git reflog
查看所有版本号,由此可以穿梭未来,回到过去 -
$ git log -S [keyword]
根据关键词,搜索提交历史 -
$ git log -[n] --pretty --oneline
以简写的形式显示过去n次的提交信息,显示所有去掉-[n]
,显示完整的版本号--pretty=oneline
-
$ git diff
显示暂存区和工作区的代码差异
-
-
远程仓库
-
$ git remote
查看远程库信息,后面加-v
查看详细信息 -
$ git remote add origin git@github.com:username/projectname.git
把本地项目与远程项目关联 -
$ git push origin [branch-name]
把本地项目推送至远程项目对应的分支上,origin是默认的主机名,第一次使用会提示验证,输入yes即可 -
$ git push origin --delete [branch]
删除远程分支 -
$ git clone git@github.com:username/projectname.git
把远程项目克隆至本地,git支持多种协议,默认的git://使用ssh协议,也可使用https协议,但传输速度要慢 -
$ git checkout -b [branch-name] origin/[branch-name]
在本地创建和远程分支对应的分支,使用时,本地和远程分支的名称最好一致 - 如果与远程库相连? 1. 在 c盘 -> user > .ssh > 找到 id_rsa.pub 这是公钥,还有一个是秘钥,右键记事本打开复制,粘贴到 github -> 设置 -> ssh key -> 新建一个 名称随意,内容粘贴。如果没有秘钥使用
$ ssh-keygen -t rsa -C 'YourEmail@example.com'
生成,再没有卸载Git重装 2. 项目关联或者克隆随意 3. 公钥的位置要在环境变量中配置好才能生效,所以生成秘钥最好在默认的位置。 - 关联失败? 可能是远程库创建时生成了RENAME文件造成内容与本地库不符,使用
$ git pull origin master
抓取远程库与本地库同步 - 一个项目关联 github 和 gitee ? 先把公钥配置好,然后删除现有的origin的远程库
$ git remote rm origin
,再使用$ git remote add origin git@github.com:username/projectname.git
分别连接 github 和 gitee ,修改origin
为 github 执行一次,再修改为origin
为 gitee 再执行一次,查看$ git remote -v
时可以看到有两个远程库,推送时需要给定特殊的名称,ex:$ git push github master
-