概念
- 工作区(Working Directory):电脑本地硬盘目录
- 版本库(Repository):工作区有个隐藏目录.git,它就是Git的本地版本库
- 暂存区(stage):一般存放在”git目录”下的index文件(.git/index)中,所以把暂存区有时也叫作索引(index)。
安装Git
略
设置本地用户名和密码
全局设置
git config --global user.name "用户名"
git config --global user.email "邮箱"
--global
表示全局的,即当前用户都有效,该配置会出现在 ~/.gitconfig
文件中,~表示当前用户的目录,比如我的是:C:\Users\dedemao\.gitconfig
,打开该文件你会发现如下图所示的内容:
局部设置
git config user.name "用户名"
git config user.email "邮箱"
局部是只对当前仓库起效的,它的配置信息会在当前仓库目录.git/config
文件下:
注意:局部变量会覆盖全局变量。
查看用户名和邮箱地址
git config user.name
git config user.email
配置ssh秘钥
生成ssh密钥
ssh-keygen -t rsa -C 884358@qq.com
注:884358@qq.com
为github的登录账号
一路回车即可。
windows系统会在C:\Users\用户名\
下生成.ssh
文件夹,内容如下:
配置公钥
登录github网站,进入设置页面,点击SSH and GPG keys
->New SSH key
将C:\Users\用户名\.ssh\id_rsa.pub
中的内容复制进去即可。
测试连通性
ssh -T git@github.com
如果是自己搭建的gitlab:
ssh -T ssh://git@git.yourgitlab.com:22
克隆远程仓库
git clone ssh://git@git.yourgitlab.com:22/work/test.git
注意:22为ssh的默认端口
创建新版本库
1.创建空目录
$ mkdir test
2.通过git init命令把这个目录变成Git可以管理的仓库
$ cd test
$ git init
3.添加文件到版本库
例如在目录下新建一个readme.txt文件
$ git add readme.txt
如果要添加当前目录下的所有文件到版本库
$ git add .
4.把文件提交到版本库
$ git commit -m "这里填写本次提交的说明"
5.把本地库的所有内容推送到远程库
5.1 链接远程仓库
$ git remote add origin https://github.com/xxx/xxx.git
- 删除连接远程仓库
$ git remote rm origin
5.2 把本地仓库的变化连接到远程仓库主分支
$ git pull origin master
5.3 推送
$ git push -u origin master
其他
删除远程仓库链接
$ git remote rm origin
显示工作目录和暂存区的状态
git status
撤销add操作
git reset HEAD #如果后面什么都不跟的话 就是上一次add 里面的全部撤销了
git reset HEAD #XXX/XXX/XXX.java 就是对某个文件进行撤销了
查看当前Git环境所有配置
git config --list
综合练习
git clone https://code.aliyun.com/xxx.git
cd makehtml_m
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master</blockquote>
已存在的文件夹或 Git 仓库
cd existing_folder
git init
git remote add origin https://code.aliyun.com/xxx.git
git add .
git commit
git push -u origin master
删除远程文件夹
git rm -r -n --cached *
git rm -r --cached *
git commit -m "移除src目录下所有文件的版本控制"
git push origin master
举例:
删除缓存区.idea(保留工作区.idea)
git rm --cached -r .idea
提交gitiginore文件,将.idea从源代码仓库中删除(-m 表示注解)
git commit -m "commit and remove .idea"
推送到远程仓库
git push origin master
.gitignore文件
不想推送到github上的文件和文件夹可以写入到.gitignore
文件中,内容举例如下:
vendor/
.idea/
.git
创建分支
- 创建分支
git branch dev
- 切换分支
git checkout dev
- 创建本地
dev
分支并切换
git checkout -b dev
- 推送本地origin至远程dev分支
注:如果远程没有dev分支,将自动创建
git push origin dev
查看分支
git branch
从远程仓库拉取分支
从远程dev分支拉取
git pull origin dev
合并分支
git merge dev
删除分支
git branch -d dev
克隆远程仓库
git clone https://www.github.com/xxx.git
根据远程的dev分支创建本地的dev分支
git checkout -b dev origin/dev
查看日志
git log 文件名
例如:
git log a.txt
一行显示
git log --pretty=oneline a.txt
比较暂存区与本地库
git diff
例如:
git diff a.txt
版本回退
回退至上一版本
git reset --hard HEAD^
回退3个版本
git reset --hard HEAD~3
恢复至指定版本
查看版本
git reflog a.txt
恢复至指定版本号
git reset --hard f18efdb
版本回撤
指本地修改后,还未提交修改的情况
例如修改了本地的a.txt文件后,还未提交至暂存区,希望恢复工作区至上一版本。
git checkout -- a.txt
Fork
Fork
用叉子把别人的东西叉到你碗里~
就是把别人的项目clone
一份,但是owner
变成自己,这样你就可以在遵守Open source license
的前提下任意修改这个项目了。
相当于你在原项目的主分支上又建立了一个分支,你可以在该分支上任意修改,如果想将你的修改合并到原项目中时,可以pull request
,这样原项目的作者就可以将你修改的东西合并到原项目的主分支上去,这样你就为开源项目贡献了代码,开源项目就会在大家共同的努力下不断壮大和完善。
修改分支名为main
git branch -M main
查看最近或某一次提交修改的文件列表
git log --name-status #每次修改的文件列表, 显示状态
git log --name-only #每次修改的文件列表
git log --stat #每次修改的文件列表, 及文件修改的统计
git whatchanged #每次修改的文件列表
git whatchanged --stat #每次修改的文件列表, 及文件修改的统计
git show #显示最后一次的文件改变的具体内容
git show -5 #显示最后 5 次的文件改变的具体内容
git show commitid #显示某个 commitid 改变的具体内容
导出修改和添加的文件
查看commit id
git log
导出指定commit id的文件
git diff-tree -r --no-commit-id --name-only --diff-filter=ACMRT $commit_id | tar -czf file.tgz -T -
参考:
https://code.aliyun.com/
http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html