git在windows下的安装和本地仓库的创建和操作
git在windows下的安装和本地仓库的创建和操作
一、git在windows下的安装和本地仓库的创建和操作
一、git安装完成后的标志查看和基本配置(自报家门配置)
1.git在window下一直下一步安装完成后的标志
在桌面右击会看到两个图标:Git GUI Here(图形工具,一般不用)和Git Bash Here(命令行工具,一般使用)
2.git进入命令行工具,然后自报家门的基本配置
在开始菜单处,输入git——点击Git Bash即可进入命令行的git命令行工具界面,使用git前先报家门(两个配置:你是谁和怎么联系到你),否则代码不能提交,抱一个自己的名号:
在命令行窗口输入:
lenovo@LAPTOP-PNM73HBA MINGW64 ~
$ git config --global user.name shi #你是谁
lenovo@LAPTOP-PNM73HBA MINGW64 ~
$ git config --global user.email 1441107787@qq.com #怎么联系到你
lenovo@LAPTOP-PNM73HBA MINGW64 ~
3.git的常用3个区域:
工作区:就是开放代码的区域,此时文件没有纳入版本管理控制,文件名为红色。
暂存区:git add 指定文件名或.(当前仓库所有文件) #add后会将文件添加的暂存区,文件名为绿色。
版本库: 暂存区文件可通过git commit -m “提交说明信息” 命令,将文件提交到版本库,所有都提交后工作区就是空的了
二、git代码管理:(本地的代码开发、依步骤提交到暂存区和本地仓库)
1.创建版本库(将指定目录初始化成本地版本仓库):(先到F盘下创建一个test,然后进入空目录test,将test初始化成本地仓库)
lenovo@LAPTOP-PNM73HBA MINGW64 ~
$ cd F:/
lenovo@LAPTOP-PNM73HBA MINGW64 /f
$ mkdir test #创建一个空目录
lenovo@LAPTOP-PNM73HBA MINGW64 /f
$ cd test #进入空目录
lenovo@LAPTOP-PNM73HBA MINGW64 /f/test
$ ls
lenovo@LAPTOP-PNM73HBA MINGW64 /f/test
$ git init #将空目录初始化成本地仓库
Initialized empty Git repository in F:/test/.git/
lenovo@LAPTOP-PNM73HBA MINGW64 /f/test (master)
$ ls -a
./ ../ .git/
lenovo@LAPTOP-PNM73HBA MINGW64 /f/test (master)
2.在上面初始化的仓库test中进行开发代码,如下:
在windows下双击进入初始化的仓库文件夹,在里面创建开发文件即可。或者利用软件工具开发代码,将开发文件保存到该本地仓库目录中即可。
3.打开git命令行,对仓库中的代码文件进行管理(追踪、添加到暂存区、提交到版本库和修改或删除文件等操作,注意进入命令行后,需要cd到相应代码仓库目录下才能操作有效)
3个区域的增加文件、修改文件、删除文件
a)增加文件:
重新从开始菜单打开命令行进行操作:(开始处输入git——点击Git Bash,如下:) #也可不重新进入,此处是为了独立分开写
lenovo@LAPTOP-PNM73HBA MINGW64 ~
$ cd F:/test #进到相应本地仓库
lenovo@LAPTOP-PNM73HBA MINGW64 /f/test (master)
$ git status #查看文件状态
lenovo@LAPTOP-PNM73HBA MINGW64 /f/test (master)
$ git add . #从工作区添加文件到暂存区,加到版本控制里去,可以git add 指定文件名,也可git add . 表示当前仓库所有文件
lenovo@LAPTOP-PNM73HBA MINGW64 /f/test (master)
$ git status
lenovo@LAPTOP-PNM73HBA MINGW64 /f/test (master)
$ git commit -m "tijiao to banbenku" #将文件从暂存区提交到版本库
lenovo@LAPTOP-PNM73HBA MINGW64 /f/test (master)
$ git status
lenovo@LAPTOP-PNM73HBA MINGW64 /f/test (master)
b)修改文件:
工作区先修改文件:修改文件完成后,进行下面操作:
重新从开始进入命令行:
lenovo@LAPTOP-PNM73HBA MINGW64 ~
$ cd F:/test #进到相应本地仓库
lenovo@LAPTOP-PNM73HBA MINGW64 /f/test (master)
$ git status #查看文件状态
lenovo@LAPTOP-PNM73HBA MINGW64 /f/test (master)
$ git add index.txt #将指定文件添加到暂存区,git add . 表示添加所有文件
lenovo@LAPTOP-PNM73HBA MINGW64 /f/test (master)
$ git status
lenovo@LAPTOP-PNM73HBA MINGW64 /f/test (master)
$ git commit -m "modify index.txt" #提交到版本库
lenovo@LAPTOP-PNM73HBA MINGW64 /f/test (master)
$ git status
lenovo@LAPTOP-PNM73HBA MINGW64 /f/test (master)
c)删除文件:
重新从开始进入命令行:
lenovo@LAPTOP-PNM73HBA MINGW64 ~
$ cd F:/test #进到相应本地仓库
lenovo@LAPTOP-PNM73HBA MINGW64 /f/test (master)
$ ls
index.txt
lenovo@LAPTOP-PNM73HBA MINGW64 /f/test (master)
$ git status #查看文件状态
lenovo@LAPTOP-PNM73HBA MINGW64 /f/test (master)
$ git rm index.txt #删除工作区文件并提交到暂存区(若手动删除工作区文件,先手动删除,然后需要再add一下到暂存区)
lenovo@LAPTOP-PNM73HBA MINGW64 /f/test (master)
$ git status
lenovo@LAPTOP-PNM73HBA MINGW64 /f/test (master)
$ git commit -m "del index.txt" #删除文件提交到暂存区后,从暂存区再提交到版本库
lenovo@LAPTOP-PNM73HBA MINGW64 /f/test (master)
$ git status
lenovo@LAPTOP-PNM73HBA MINGW64 /f/test (master)
删除后,到F:/test中查看,index.txt文件已没有了。
二、git和github远程仓库的管理和操作
一、git代码管理1:(本地代码开发提交暂存区和本地仓库后,再把代码推到远程仓库(gtihub代码托管的地址公有仓库))
1.在github上(地址:https://github.com/)注册一个账号ssshijq/xxQQ2011并创建一个远程仓库lianshou并获得远程公有仓库地址:
注册github账号并登陆后创建空的远程公有仓库名:lianshou,找到公有仓库的地址:(有两种)
注意:地址有两种:HTTPS的和SSH的:
推送到远程仓库使用用户名和密码时候: 可以使用HTTPS的地址类型 https://github.com/ssshijq/lianshou.git
配置密钥对,无需用户名和密码推送到远程参考时候: 可以使用SSH的地址类型 git@github.com:ssshijq/lianshou.git
2.安装git后,工作区创建代码,添加到暂存区,提交到本地仓库,然后将本地master分支(最初默认)推送到github远程地址的公有仓库lianshou
(包括远程仓库地址的别名设置、查看和删除)
A)准备工作:
github账号密码:ssshi/xxQQ2011
远程地址:https://github.com/ssshijq/lianshou.git 或: git@github.com:ssshijq/lianshou.git
远程仓库名:lianshou #注意下面本地仓库名是e:/test
B)推送到远程仓库格式:
git push 远程仓库地址(https或http) 本地仓库分支名:远程仓库分支名 #本地仓库分支名或远程仓库分支名可省略
git push 远程仓库地址(https或http) 本地仓库分支名 #省略远程仓库分支名,若该远程分支不存在,则会被新建
git push 远程仓库地址(https或http) :远程仓库分支名 #省略本地仓库分支名,表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支
#https一般需要输入密码,http时可以通过配置公钥,不用输入密码.一般本地分支和远程分支是一样的,但有时也可能不一样。
C) 将本地仓库test的代码推送到github远程地址的公有仓库:lianshou (推送方式1(https),直接使用远程地址推送,需要手动输入用户名和密码)
重新从开始菜单打开命令行进行操作:(开始处输入git——点击Git Bash,如下:) #也可不重新进入,此处是为了独立分开写
yuanww@yuanww-PC MINGW64 /
$ cd e:/test #进到相应本地仓库
$ ls
lianshou1.txt lianshou2.txt
yuanww@yuanww-PC MINGW64 /e/test (master)
推送方式a(不使用别名): 推送方式a和b本质上一样,只不过一个用别名一个没有用别名。
$ git push https://github.com/ssshijq/lianshou.git master #省略远程分支,若远程仓库不存在master分支,则会被新建
Username for 'https://github.com': ssshijq #手动输入用户名和密码
。。。。。。。。。。。。。。。。。。。。。。
* [new branch] master -> master
yuanww@yuanww-PC MINGW64 /e/test (master)
推送方式b(使用别名): 推送方式a和b本质上一样,只不过一个用别名一个没有用别名。
$ git remote -v #查看远程仓库地址和对应别名
yuanww@yuanww-PC MINGW64 /e/test (master)
$ git remote add origin https://github.com/ssshijq/lianshou.git #添加远程仓库地址和对应别名
yuanww@yuanww-PC MINGW64 /e/test (master)
$ git remote -v #查看
origin https://github.com/ssshijq/lianshou.git (fetch)
origin https://github.com/ssshijq/lianshou.git (push)
yuanww@yuanww-PC MINGW64 /e/test (master)
$ git push origin master #用别名推送本地仓库master分支到远程仓库,省略远程分支,若远程仓库不存在master分支,则会被新建
Username for 'https://github.com': ssshijq #手动输入用户名和密码
。。。。。。。。。。。。。。。。。。。。。。
* [new branch] master -> master
yuanww@yuanww-PC MINGW64 /e/test (master)
$ git remote remove origin #删除远程仓库地址和对应别名
yuanww@yuanww-PC MINGW64 /e/test (master)
$ git remote -v
yuanww@yuanww-PC MINGW64 /e/test (master)
登录github的lianshou远程仓库,查看上传上来的代码文件:能查看到。
D) 将本地仓库test的代码推送到github远程地址的公有仓库:lianshou (推送方式2(http),直接使用远程地址推送,不需要输入用户名和密码)
每次将本地分支代码提交到远程仓库时,都让输入用户名和密码,很不方便,所以在本地上创建秘钥对,将公钥内容粘贴到github远程仓库的配置公钥处,这样配置后,再从本地仓库提交到远程仓库时候就不需要输入用户名和密码了。
a)在本地创建密钥对,公钥和私钥并将公钥内容粘贴在github远程仓库的配置公钥处:
重新从开始菜单打开命令行进行操作:(开始处输入git——点击Git Bash,如下:) #也可不重新进入,此处是为了独立分开写
yuanww@yuanww-PC MINGW64 /
$ ssh-keygen -t rsa -C "1441107787@qq.com" #生成秘钥对,在任意路径,一路回车即可,根据提示在/c/Users/yuanww/.ssh/id_rsa.pub形成密钥对儿
。。。。。。。。。。。。。。。。。 查看公钥内容C:\Users\yuanww\.ssh\id_rsa.pu复制后,登录粘贴到github远程仓库lianshou配置公钥处:
b)将代码推送到远程仓库(推送方式2,配置公钥,不需输入密码的推送)
推送方式a(不使用别名): 推送方式a和b本质上一样,只不过一个用别名一个没有用别名。
重新从开始菜单打开命令行进行操作:(开始处输入git——点击Git Bash,如下:) #也可不重新进入,此处是为了独立分开写
yuanww@yuanww-PC MINGW64 /
$ cd e:/test #进到相应本地仓库
$ ls
lianshou1.txt lianshou2.txt
yuanww@yuanww-PC MINGW64 /e/test (master)
$ git push git@github.com:ssshijq/lianshou.git master #省略远程分支,若远程仓库不存在master分支则会被新建无需密码推送
..........
* [new branch] master -> master
yuanww@yuanww-PC MINGW64 /e/test (master)
推送方式b(使用别名): 推送方式a和b本质上一样,只不过一个用别名一个没有用别名。
yuanww@yuanww-PC MINGW64 /
$ cd e:/test #进到相应本地仓库
$ ls
lianshou1.txt lianshou2.txt
yuanww@yuanww-PC MINGW64 /e/test (master)
$ git remote -v #查看远程仓库地址和对应别名
yuanww@yuanww-PC MINGW64 /e/test (master)
$ git remote add origin git@github.com:ssshijq/lianshou.git #添加远程仓库地址和对应别名
yuanww@yuanww-PC MINGW64 /e/test (master)
$ git remote -v
origin git@github.com:ssshijq/lianshou.git (fetch)
origin git@github.com:ssshijq/lianshou.git (push)
yuanww@yuanww-PC MINGW64 /e/test (master)
$ git push origin master #用别名推送本地仓库master分支到远程仓库,省略远程分支,若远程仓库不存在master分支,则会被新建且不需密码
.........
* [new branch] master -> master
yuanww@yuanww-PC MINGW64 /e/test (master)
$ git remote remove origin #删除远程仓库地址和对应别名
yuanww@yuanww-PC MINGW64 /e/test (master)
$ git remote -v
yuanww@yuanww-PC MINGW64 /e/test (master)
登录github的lianshou远程仓库,查看上传上来的代码文件:能查看到。
二、git管理2,并将远程公有仓库lianshou克隆到本地d盘(因为远程仓库是公有仓库,克隆时不需密码,如果私有可能需要密码)
克隆远程仓库的格式: git clone -b 远程仓库分支名 远程仓库地址 #指定分支克隆远程仓库(此处是公有仓库)
此处是换了一台电脑,重新安装了git,然后再克隆:
shijq@DESKTOP-6DGGV7B MINGW64 ~
$ cd d:/ #进入本地的d盘
shijq@DESKTOP-6DGGV7B MINGW64 /d
$ ls
'$RECYCLE.BIN'/
BaiduYunDownload/
chrome_download/
iso/
pagefile.sys
'Program Files'/
'System Volume Information'/
VMware-VIMSetup-all-5.5.0-1891310-20140201-update01/
VMware-VIMSetup-all-5.5.0-1891310-20140201-update01.iso
大白菜ISO/
交接文档/
搜狗高速下载/
迅雷下载/
桌面/
shijq@DESKTOP-6DGGV7B MINGW64 /d
$ git clone -b master https://github.com/ssshijq/lianshou.git #克隆远程仓库lianshou到本地d盘,公有仓库不需密码
Cloning into 'lianshou'...
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 4 (delta 0), reused 4 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), done.
shijq@DESKTOP-6DGGV7B MINGW64 /d
$ ls
'$RECYCLE.BIN'/
BaiduYunDownload/
chrome_download/
iso/
lianshou/
pagefile.sys
'Program Files'/
'System Volume Information'/
VMware-VIMSetup-all-5.5.0-1891310-20140201-update01/
VMware-VIMSetup-all-5.5.0-1891310-20140201-update01.iso
大白菜ISO/
交接文档/
搜狗高速下载/
迅雷下载/
桌面/
shijq@DESKTOP-6DGGV7B MINGW64 /d
到d盘查看,有克隆下来的仓库:lianshou,里面有远程仓库对应代码.
三、git管理3,并将远程公有仓库lianshou拉pull到本地某个初始的仓库中(因为远程仓库是公有仓库,拉时不需密码,如果私有可能需要密码)
拉取远程仓库代码的格式: git pull 远程仓库地址 远程仓库分支名:本地仓库分支名 #将远程仓库分支拉取合并到本地分支,省略本地分支
git pull 远程仓库地址 远程仓库的分支名 #省略本地仓库分支名,如果省略本地分支,则将自动合并到当前所在分支上
#注意:一般远程分支没必要省略,省略了没意义,因为省略了,那你是拉取远程的哪个分支呢?
如:github上远程公有仓库lianshou上有代码:lianshou1.txt和lianshou2.txt github
远程公有仓库地址为:https://github.com/ssshijq/lianshou.git 用户名和密码是:ssshijq/xxQQ2011
yuanww@yuanww-PC MINGW64 /
$ cd e:/
yuanww@yuanww-PC MINGW64 /e
$ mkdir test2
yuanww@yuanww-PC MINGW64 /e
$ cd test2
yuanww@yuanww-PC MINGW64 /e/test2
$ git init
Initialized empty Git repository in E:/test2/.git/
yuanww@yuanww-PC MINGW64 /e/test2 (master)
$ ls -a
./ ../ .git/
yuanww@yuanww-PC MINGW64 /e/test2 (master)
$ git pull https://github.com/ssshijq/lianshou.git master #拉取远程仓库master分支到当前分支,省略了本地分支
........
* branch master -> FETCH_HEAD
yuanww@yuanww-PC MINGW64 /e/test2 (master)
$ ls -a
./ ../ .git/ lianshou1.txt lianshou2.txt
yuanww@yuanww-PC MINGW64 /e/test2 (master)
到e盘查看,有拉取下来的远程仓库lianshou里面的对应代码.
四、git代码管理4,git的日志查看和版本切换:(以本地仓库为例)
和上面没关系,重新建立一个新仓库提交代码,修改代码,然后进行日志的查看和版本切换
1)创建一个新仓库,初始化仓库new_cangku
yuanww@yuanww-PC MINGW64 /
$ cd e:
yuanww@yuanww-PC MINGW64 /e
$ mkdir new_cangku #创建空仓库
yuanww@yuanww-PC MINGW64 /e
$ cd new_cangku/ #进入空仓库目录
yuanww@yuanww-PC MINGW64 /e/new_cangku
$ git init #初始化仓库
Initialized empty Git repository in E:/new_cangku/.git/
yuanww@yuanww-PC MINGW64 /e/new_cangku (master)
$ ls -a
./ ../ .git/
yuanww@yuanww-PC MINGW64 /e/new_cangku (master)
2)进入仓库,在工作区开发代码文件:ceshi1.txt和ceshi2.txt
第一次开发的代码内容是:ceshi1.txt: ceshi111111111 ;ceshi2.txt: ceshi2222222222
3)将工作区代码依次提交到暂存区和本地仓库:new_cangku
yuanww@yuanww-PC MINGW64 /
$ cd e:/new_cangku #进入本地仓库目录
yuanww@yuanww-PC MINGW64 /e/new_cangku (master)
$ ls
ceshi1.txt ceshi2.txt
yuanww@yuanww-PC MINGW64 /e/new_cangku (master)
$ git status #查看文件状态
yuanww@yuanww-PC MINGW64 /e/new_cangku (master)
$ git add . #将所有文件添加到暂存区
yuanww@yuanww-PC MINGW64 /e/new_cangku (master)
$ git commit -m "第一次代码提交到本地仓库" #将暂存区文件提交的本地仓库
。。。。。。。。
yuanww@yuanww-PC MINGW64 /e/new_cangku (master)
4)在工作区修改代码,修改后代码内容为:
第一次修改后的代码内容是:ceshi1.txt: ceshi1 ;ceshi2.txt: ceshi2
5)将修改后的代码依次提交的暂存区和本地仓库:new_cangku
yuanww@yuanww-PC MINGW64 /
$ cd e:/new_cangku #进入本地仓库目录
yuanww@yuanww-PC MINGW64 /e/new_cangku (master)
$ git status
。。。。。。。
yuanww@yuanww-PC MINGW64 /e/new_cangku (master)
$ git add . #将工作区修改的文件添加到暂存区
yuanww@yuanww-PC MINGW64 /e/new_cangku (master)
$ git commit -m "第一次修改后代码提交到本地仓库" #将暂存区文件提交的本地仓库
yuanww@yuanww-PC MINGW64 /e/new_cangku (master)
6)查看git操作的日志,然后将版本切换成原来第一次开发时候的代码:(向以前的方向查看日志操作记录)
yuanww@yuanww-PC MINGW64 /
$ cd e:/new_cangku
yuanww@yuanww-PC MINGW64 /e/new_cangku (master)
$ git log --pretty=oneline #向以前的方向查看日志操作记录,以一行显示比较好看
ad104cb1fd5b143a6f70b31ecfa89607a8153bac (HEAD -> master) 第一次修改后代码提交到 本地仓库
36405767c22b884b72f5182a0ab2549bf2f6275d 第一次代码提交到本地仓库
yuanww@yuanww-PC MINGW64 /e/new_cangku (master)
$ git reset --hard 36405767c22b884b72f5182 #切换日志到第一次开发代码的时刻,--hard后面的是部分内容(能区分开即可)
yuanww@yuanww-PC MINGW64 /e/new_cangku (master)
到本地仓库文件目录查看代码:(已经回到了第一次开发时候的代码)
第一次开发的代码内容是:ceshi1.txt: ceshi111111111 ;ceshi2.txt: ceshi2222222222
7)查看git操作的日志,然后将版本切换成原来第一次修改时候的代码:
$ git reflog #向以后的方向查看日志操作记录,因为如果往前方向,前面是没有日志记录的,要想切到后面需往后查看
3640576 (HEAD -> master) HEAD@{0}: reset: moving to 36405767c22b884b72f5182
ad104cb HEAD@{1}: reset: moving to ad104cb1fd5b143a6
ad104cb HEAD@{2}: commit: 第一次修改后代码提交到本地仓库
3640576 (HEAD -> master) HEAD@{3}: commit (initial): 第一次代码提交到本地仓库
yuanww@yuanww-PC MINGW64 /e/new_cangku (master)
$ git reset --hard ad104cb #切换日志到第一次修改代码的时刻,--hard后面的是部分内容(能区分开即可)
yuanww@yuanww-PC MINGW64 /e/new_cangku (master)
到本地仓库文件目录查看代码:(已经回到了第一次修改时候的代码)
第一次修改后的代码内容是:ceshi1.txt: ceshi1 ;ceshi2.txt: ceshi2
五、分支管理(分支的创建、查看、切换、合并、删除)
1.分支的概念理解示意图:
svn创建分支比较笨:一份数据多大,创建时候就是多大,所以创建分支很慢。
git创建分支很快:不管一份数据多大,只记录变化的数据,创建分支都是秒级别的。
2.分支管理:(查看分支、创建分支,切换分支、合并分支)
A)分支查看、创建、切换格式:
git branch #查看当前所在分支
git branch 新分支名 #创建新分支
git checkout 新分支名 #切换到新分支
B)分支合并格式:
先切到要合并到的分支,如:master
$git checkout 要合并到的分支
$git merge 要合并的分支 如:将dev分支合并到master则: $git checkout master && $git merge dev
C)删除分支格式:
git branch -d 要删除的分支名 如删除dev分支:git branch -d dev
更多推荐
所有评论(0)