git概念理解和简明教程
git十分钟简明教程
对于新手,推荐以git简明操作的教程,这个便于对git有个简单的全局了解。
git中工作区、暂存区和HEAD的理解
git中本地仓库维护的三个 “树” 分别是工作区、暂存区(Index)和HEAD。
工作区指的就是电脑文件夹目录下你能看到的文件和文件夹;
暂存区指的就是你工作区中的文件提交到本地仓库中的一个过渡区域;HEAD指的就是你最后一次commit提交的结果。git还有一个版本库的概念,是工作区下的一个隐藏目录 .git
,该文件夹不属于工作区,指的是git版本库。
git操作的流程图理解以及常用命令
第一次提交代码到远程仓库的命令
git init
在项目目录下初始化一个本地仓库
git add .
将工作区内的所有文件都添加到暂存区中,注意文件的大小有限制,如果太大了考虑添加一个 .gitignore
文件
git commit -m 'first commit'
将暂存区中的文件提交到本地仓库,'first commit'
指的是提交的描述
git remote add origin url
本地仓库链接远程仓库,url指的是远程仓库的地址,origin指的是给这个仓库地址起了个别名
git push origin master
将本地仓库master分支的内容推送到远程仓库
git相关命令
git checkout
用于切换分支或恢复工作区文件,将HEAD树中文件覆盖掉工作区中的文件
git checkout -- filename
是将本地仓库版本库中HEAD树中的文件覆盖工作区中的文件,filename是文件名
git fetch
用于从远程仓库分支获取代码,执行这条命令后需要执行 git merge
将远程分支合并到本地分支
git clone
是指将远程仓库的代码拉取到本地,默认是拉取远程master分支,相当于是拷贝一个项目
git pull origin master:test
是指拉取origin远程仓库master分支的代码,再与本地的test分支合并;可以等价为
git fetch origin master:test
git merge test
git branch
:查看本地当前分支
git branch -r
:查看远程分支
git branch -a
:查看所有分支
git branch test
:新建一个test分支
git checkout test
:切换到test分支
git branch -m test test1
: 将本地test分支的名字修改为test1,注意只改动的是本地分支,远程分支并没有改
git branch -D test
:删除本地分支test
git push origin --delete test
: 删除远程分支test
git status
: 用于显示工作区和暂存区的状态。显示Index文件和当前HEAD提交之间的差异,这是通过 git commit 命令提交的;在工作区和Index文件之间有差异的路径以及工作区中没有被git追踪的路径,这是在git commit命令前通过 git add 命令提交的
git rm filename
:直接删除文件并将该操作完后结果add进暂存区,等于直接从暂存区移除指定文件filename,工作区中也删除了;如果需要在工作区中保存该文件,可以 git rm filename --cached
git diff
:比较的是当前工作区文件和暂存区文件的差异
git diff --cached
和 git diff --staged
:比较的是暂存区文件和HEAD之间的差异
git diff HEAD
:比较的是工作区文件和HEAD之间的差异
git diff test1 test2
:比较的是本地分支test1和test2之间的差异
git reset --hard <commit>
:将当前分支重设到指定的 <commit>
,并更新Index和工作目录。这个<commit>
可以通过 git log
查询到
当使用 git clone
拉取远程仓库默认分支后,想继续拉取远程仓库的另一个分支,应该 git checkout -b test origin/test
,意思是在本地创建一个test分支用来跟踪远程的test分支。这时本地的test分支代码就是远程的test分支代码
git克隆单个文件夹
- 本地初始化一个新的仓库接收克隆的文件夹:
git init test && cd test
本地初始化仓库,仓库名为test,并进入到test文件夹中 - 设置允许克隆子目录:
git config core.sparsecheckout true
- 设置要克隆的仓库的子目录路径:
echo 'path' >> .git/info/sparse-checkout
path为路径,比如克隆的子目录是 main 文件夹,那么就是echo 'main*' >> .git/info/sparse-checkout
- 本地仓库链接远程仓库:
git remote add origin url
url为远程仓库的ssh地址 - 克隆代码:
git pull origin master
git提交代码到Github时的代理问题
推送代码到github时,由于开了代理,因此需要在推送前也在终端开启代理,需要设置
export all_proxy='socks5://127.0.0.1:1081'
这里的 socks5
代表的是采用socks5的代理协议,127.0.0.1
代表主机地址,1081
指的是端口,这个端口要在开的代理软件中查看自己电脑用哪个端口进行代理的。这样操作必须每次打开git bash终端推送时,都设置一遍。
可以选择对github进行代理
git config --global http.https://github.com.proxy socks5://127.0.0.1:1081
git config --global https.https://github.com.proxy socks5://127.0.0.1:1081