Windows Git 安装及使用
追加:7、远程仓库管理
本片git内容适合:对git了解少的人,较适合初级或小白程序员!
1、git 安装、升级、简单测试
git安装:
描述:windows下载地址:windows git 默认会根据你的电脑下载适合版本类型
流程:双击下载的:Git-2.23.0-64-bit.exe --> 一直点击Next就可好(可以更改一下git安装路径).
git升级:
描述:git已经安装,想升级到最新版本
命令:尝试这两个命令git update 和 git update-git-for-windows
#查看当前git版本
$ git version
git version 2.20.1.windows.1
#升级git到最新本版 再输入 "y"
$ git update
#升级git到最新本版 再输入 "y"
$ git update-git-for-windows
#查看升级后的git版本
$ git version
git version 2.24.0.windows.1
下载的新版本git的安装路径,默认是旧版本的安装地址
配置git的户信息:
命令:
#右击鼠标-->Git Bash Here 输入命令
#配置git用户名:随便起,最好好写成自己的拼音名字,这样提交代码到远程仓库,别人知道是你提交的
$ git config --global user.name "ZhengJa"
#配置git邮箱:邮箱格式要对,不要求邮箱是真的
$ git config --global user.email "953649948@qq.com"
命令演示:
Administrator@ZhengJiaAo MINGW64 ~/Desktop
#git配置用户名
$ git config --global user.name "ZhengJa"
Administrator@ZhengJiaAo MINGW64 ~/Desktop
#查询配置的用户名
$ git config user.name
ZhengJa
Administrator@ZhengJiaAo MINGW64 ~/Desktop
#git配置邮箱
$ git config --global user.email "953649948@qq.com"
Administrator@ZhengJiaAo MINGW64 ~/Desktop
#查询配置的邮箱
$ git config user.email
953649948@qq.com
Administrator@ZhengJiaAo MINGW64 ~/Desktop
#查询git的所有配置信息
$ git config --list
core.symlinks=false
core.autocrlf=true
core.fscache=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
help.format=html
rebase.autosquash=true
http.sslcainfo=D:/Git/mingw64/ssl/certs/ca-bundle.crt
http.sslbackend=openssl
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
credential.helper=manager
user.name=ZhengJa
user.email=953649948@qq.com
ssh.variant=ssh
git安装及配置已经完成!
(可选)git客户端安装:sourcetree 官网下载 点击-->Download for Windows
git本地测试:
创建一个demo文件夹,作为演示的本地仓库。此git工作流并没有与远程仓库做关联!
流程:创建文件test.txt-->添加至暂存区-->将暂存区内容commit到本地仓库
命令:
#初始化本版库
git init
#添加文件到版本库,添加某个文件 git add test.txt 添加所有 git add .
git add
git commit -m "提交信息"
#查看仓库状态
git status
命令演示:
Administrator@ZhengJiaAo MINGW64 /j/testfile
#进入一个干净的文件夹-->testfile
$ ls
Administrator@ZhengJiaAo MINGW64 /j/testfile
#创建一个文件夹
$ mkdir demo
Administrator@ZhengJiaAo MINGW64 /j/testfile
#进入刚刚创建的文件夹
$ cd demo
Administrator@ZhengJiaAo MINGW64 /j/testfile/demo
#查看,文件夹中没有任何内容
$ ll
total 0
Administrator@ZhengJiaAo MINGW64 /j/testfile/demo
#初始化git
$ git init
Initialized empty Git repository in J:/testfile/demo/.git/
Administrator@ZhengJiaAo MINGW64 /j/testfile/demo (master)
#查看 可以看出生成了一个 .git文件夹,说明初始化git仓库成功
$ ls -a
./ ../ .git/
Administrator@ZhengJiaAo MINGW64 /j/testfile/demo (master)
#将"git repo" >> 追加进test.txt文件
$ echo "git repo" >> test.txt
Administrator@ZhengJiaAo MINGW64 /j/testfile/demo (master)
#查看test.txt文件内容
$ cat test.txt
git repo
Administrator@ZhengJiaAo MINGW64 /j/testfile/demo (master)
#git 将test文件添加到暂存区
$ git add test.txt
warning: LF will be replaced by CRLF in test.txt.
The file will have its original line endings in your working directory
Administrator@ZhengJiaAo MINGW64 /j/testfile/demo (master)
#git commit 暂存区文件提交到本地本库
$ git commit -m "repo first commit"
[master (root-commit) 3337810] repo first commit
1 file changed, 1 insertion(+)
create mode 100644 test.txt
Administrator@ZhengJiaAo MINGW64 /j/testfile/demo (master)
#查看状态,说明现在都已提交到本地仓库,暂存区是干净的
$ git status
On branch master
nothing to commit, working tree clean
解决git bash 终端显示中文乱码
在git bash的界面中右击空白处,弹出菜单,选择选项->文本->本地Locale,设置为zh_CN,而旁边的字符集选框选为UTF-8。
英文显示则是:
Options->Text->Locale改为zh_CN,Character set改为UTF-8
2、git工作流
工作流图:
工作流图.png
创建一个demo2文件夹,作为演示的本地仓库。此git工作流并没有与远程仓库做关联!
前提:查看commit日志:
git log --oneline //查看commit提交列表:commit_Id
git log //commit详细信息
1、文件commit本地仓库
流程1:创建一个文件demo2_test.txt-->添加文件到暂存区-->将暂存区内容保存到本地仓库
命令:
#初始化git版本库
git init
#将文件添加到暂存区
git add
#将暂存区的文件提交到本地仓库
git commit -m "提交描述信息"
命令演示:
Administrator@ZhengJiaAo MINGW64 /j/testfile
#进入一个干净的文件夹-->testfile
$ ls
demo/
#创建一个文件夹demo2
$ mkdir demo2
#进入刚刚创建的文件夹
$ cd demo2
#查看,文件夹中没有任何内容
Administrator@ZhengJiaAo MINGW64 /j/testfile/demo2
$ ll
total 0
#初始化git
$ git init
Initialized empty Git repository in J:/testfile/demo2/.git/
#添加内容到demo2_test.txt文件
$ echo "第一天需求" >> demo2_test.txt
#查看文件内容
$ cat demo2_test.txt
第一天需求
#查看状态:demo2_test.txt 为红色字体,说明文件还没有添加到暂存区
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
demo2_test.txt
nothing added to commit but untracked files present (use "git add" to track)
#将文件添加到暂存区
$ git add demo2_test.txt
warning: LF will be replaced by CRLF in demo2_test.txt.
The file will have its original line endings in your working directory
#查看状态: demo2_test.txt字体变成绿色,说明文件已添加到暂存区,再将文件提交到本地仓库
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: demo2_test.txt
#将暂存区的文件提交到本地仓库
$ git commit -m "first-commit:新增demo2_test.txt文件"
[master (root-commit) 970eca2] first-commit:新增demo2_test.txt文件
1 file changed, 1 insertion(+)
create mode 100644 demo2_test.txt
#说明暂存区没有文件,且所有修改或添加的文件都已经提交到本地仓库
$ git status
On branch master
nothing to commit, working tree clean
2、将暂存区回退到工作区 回退修改内容
流程2:修改demo2_test.txt文件内容-->将文件到暂存区-->将文件从暂存区移除-->回退修改的文件内容
命令:
#将暂存区的文件移除
git reset HEAD demo2_test.txt
#将文件修改的内容回退,就是让这个文件回到最近一次git commit或git add时的状态,git checkout – filename 可以丢弃某个文件在工作区的改动
git checkout -- demo2_test.txt
命令演示:
Administrator@ZhengJiaAo MINGW64 /j/testfile/demo2 (master)
#向文件追加内容
$ echo "第一天:追加的需求" >> demo2_test.txt
#查看文件内容
$ cat demo2_test.txt
第一天需求
第一天:追加的需求
#查看状态:demo2_test.txt 字体是红色,说明还没有添加到暂存区,将文件添加到暂存区
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: demo2_test.txt
no changes added to commit (use "git add" and/or "git commit -a")
#添加文件到暂存区
$ git add demo2_test.txt
warning: LF will be replaced by CRLF in demo2_test.txt.
The file will have its original line endings in your working directory
#查看状态:demo2_test.txt 字体变成绿色,说明文件已在暂存区
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: demo2_test.txt
#将暂存区的文件移除
$ git reset HEAD demo2_test.txt
Unstaged changes after reset:
M demo2_test.txt
#查看状态:demo2_test.txt字体变成红色
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: demo2_test.txt
no changes added to commit (use "git add" and/or "git commit -a")
#查看文件内容
$ cat demo2_test.txt
第一天需求
第一天:追加的需求
#将文件修改的内容回退
$ git checkout -- demo2_test.txt
#回退文件修改的内容
$ cat demo2_test.txt
第一天需求
3、把最近一次commit撤回到暂存区
命令:
#查看版本库状态
$ git status
#查看commit日志
$ git log --oneline
#把最近的一次commit撤回到暂存区
$ git reset --soft HEAD^
$ git status
命令演示:
#添加文件并追加内容 "第一次修改"
$ echo "第一次修改" >> demo2_test.txt
#添加到暂存区
$ git add demo2_test.txt
#查看状态:绿色
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: demo2_test.txt
#commit提交
$ git commit -m "第一次提交文件"
[master 507c25c] 第一次提交文件
1 file changed, 1 insertion(+)
create mode 100644 demo2_test.txt
#查看状态:说明所有暂存区的内容已被提交
$ git status
On branch master
nothing to commit, working tree clean
#查看commit日志
$ git log --oneline
608e471 (HEAD -> master) 第一次提交文件
#把最近的一次commit撤回到暂存区
$ git reset --soft HEAD^
#查看状态:demo2_test.txt颜色绿色,已回退到暂存区
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: demo2_test.txt
4、回退本地版本库commit提交
流程3:修改demo2_test.txt文件内容-->将文件到暂存区-->暂存区内容commit提交-->回退commit提交内容
命令:
#查看日志:commit提交日志
$ git log
$ git log --oneline
#回退commit提交:回到某次commit提交
$ git reset --hard commit_Id
命令演示:
Administrator@ZhengJiaAo MINGW64 /j/testfile/demo2 (master)
#查看文件内容
$ cat demo2_test.txt
第一天需求
#追加内容到文件
$ echo "第二天需求" >> demo2_test.txt
#查看文件内容
$ cat demo2_test.txt
第一天需求
第二天需求
#将文件添加到暂存区
$ git add demo2_test.txt
warning: LF will be replaced by CRLF in demo2_test.txt.
The file will have its original line endings in your working directory
#将暂存区内容commit提交至本地仓库
$ git commit -m "commit:修改demo2_test.txt"
[master a6d8085] commit:修改demo2_test.txt
1 file changed, 1 insertion(+)
#查看日志:commit提交日志,可以看出有两次提交信息,现在想回到之前的“第一天需求”,“第二天需求“不需要了
$ git log
commit a6d8085e0c5e4ad6815c80128eb603132077ca9e (HEAD -> master)
Author: ZhengJa <953649948@qq.com>
Date: Thu Oct 17 12:52:57 2019 +0800
commit:修改demo2_test.txt
commit 970eca211415c4015143895ad1c8585f55298d00
Author: ZhengJa <953649948@qq.com>
Date: Thu Oct 17 11:25:25 2019 +0800
first-commit:新增demo2_test.txt文件:第一天需求
#回退commit提交:回到 ”第一天需求”
$ git reset --hard 970eca211415c4015143895ad1c8585f55298d00
HEAD is now at 970eca2 first-commit:新增demo2_test.txt文件:第一天需求
#查看状态
$ git status
On branch master
nothing to commit, working tree clean
#查看文件内容
$ cat demo2_test.txt
第一天需求
注:
1、git reset和git revert 效果一样,但区别很大
git reset :是回退commit未推动到远程仓库的版本
git revert :是撤退远程仓库已存在的commit版本
5、回退已push到远程版本库commit提交
命令
git log --oneline //查看commit提交列表:commit_Id
git revert HEAD //撤销最近一次提交
git revert HEAD~1 //撤销上上次的提交,注意:数字从0开始
git revert 0ffaacc //撤销0ffaacc这次提交
命令演示:
#文件追加内容
$ echo "追加的内容2" >> gittest.txt
#查看文件内容
$ cat gittest.txt
追加的内容1
追加的内容2
#添加修改内容到暂存区
$ git add gittest.txt
warning: LF will be replaced by CRLF in gittest.txt.
The file will have its original line endings in your working directory
#commit提交到本地仓库
$ git commit -m "提交:追加的内容2"
[master 37009fc] 提交:追加的内容2
1 file changed, 1 insertion(+)
#将commit push到远程仓库
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 354 bytes | 177.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/zhengjiaao/git_test.git
6ee6810..37009fc master -> master
#查看commit历史记录
$ git log --oneline
37009fc (HEAD -> master, origin/master, origin/HEAD) 提交:追加的内容2
7dcf51a 提交:追加的内容1
#撤销最近一次commit,进入编辑状态,英文 ZZ 退出并保存编辑
$ git revert 37009fc
hint: Waiting for your editor to close the file... error: There was a problem with the editor 'vi'.
Please supply the message using either -m or -F option.
#查看文件内容,发现"追加的内容2"内容已经不存在
$ cat gittest.txt
追加的内容1
#将新的版本提交到远程仓库
$ git commit -m "撤销gittest文件 追加的内容2"
[master a13e1ae] 撤销gittest文件 追加的内容2
1 file changed, 1 deletion(-)
#提交到远程仓库
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 362 bytes | 181.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/zhengjiaao/git_test.git
37009fc..a13e1ae master -> master
6、清空或删除本地仓库文件
命令:
#删除本地工作区或文件
git rm demo2_test.txt
#提交删除记录 commit
git commit -m "commit:delete demo2_test.txt文件"
命令演示:
Administrator@ZhengJiaAo MINGW64 /j/testfile/demo2 (master)
#查看文件内容
$ cat demo2_test.txt
第一天需求
#查看状态
$ git status
On branch master
nothing to commit, working tree clean
#查看文件个数:1
$ ll
total 1
-rw-r--r-- 1 Administrator 197121 17 10月 17 12:54 demo2_test.txt
#删除本地文件
$ git rm demo2_test.txt
rm 'demo2_test.txt'
#查看本地文件个数:0
$ ll
total 0
#查看状态:demo2_test.txt字体绿色-->本地文件已删除,但是本地仓库中的文件并没有删除,要清空本地仓库的内容,提交删除的记录
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: demo2_test.txt
#将删除记录commit提交至本地仓库
$ git commit -m "commit:delete demo2_test.txt文件"
[master 85c603f] commit:delete demo2_test.txt文件
1 file changed, 1 deletion(-)
delete mode 100644 demo2_test.txt
#查看状态:说明本地仓库已被清空
$ git status
On branch master
nothing to commit, working tree clean
回顾工作流图:
工作流图.png
3、本地已有仓库 ssh关联 远程空白仓库
1、github添加ssh keys
Github 添加ssh keys
2、github 新建仓库
github创建公共仓库.png
根据空白仓库提示执行:
github创建公共仓库2.png
本地已有仓库与远程空白仓库关联
命令:
git remote add <name> url #name:远程仓库地址别名一般为origin,url:远程仓库地址
git push -u origin master #推送到远程仓库的master分支上 -u:是强行推送(用于首次推送,之后推送只需:git push)
命令演示:
Administrator@ZhengJiaAo MINGW64 /j/testfile
#本地创建一个文件夹
$ mkdir local_test
#查看的文件夹
$ ls
demo/ demo2/ local_test/
$ cd local_test
Administrator@ZhengJiaAo MINGW64 /j/testfile/local_test
#追加内容到文件中
$ echo "# git_test" >> README.md
#查看
$ ls
README.md
#初始化git
$ git init
Initialized empty Git repository in J:/testfile/local_test/.git/
#添加文件到暂存区
$ git add README.md
warning: LF will be replaced by CRLF in README.md.
The file will have its original line endings in your working directory
#查看状态:README.md 是绿色说明已存到暂存区,再commit提交到本地仓库
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: README.md
#将暂存区所有内容提交到本地仓库
$ git commit -m "first commit"
[master (root-commit) c02fd60] first commit
1 file changed, 1 insertion(+)
create mode 100644 README.md
#添加远程仓库:本地仓库与远程仓库关联
$ git remote add origin git@github.com:zhengjiaao/git_test.git
#推送到远程仓库的master分支上 -u:是强行推送(用于首次推送,之后推送只需:git push)
$ git push -u origin master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 219 bytes | 73.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:zhengjiaao/git_test.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
上传文件后github效果图:
github创建公共仓库3.png
README.md 文件是我们本地"echo "# git_test" >> README.md"创建的,然后推送到github的远程仓库上
4、克隆仓库
描述: 远程已有仓库-这个比较简单
流程:克隆远程已有仓库地址 --> 修改文件内容 --> 将修改内容推送到远程仓库
命令:
#克隆远程已有仓库地址
$ git clone url
#操作:修改文件内容
#将修改内容推送到远程仓库
$ git add
$ git commit -m "commit 信息"
$ git push
命令演示:
Administrator@ZhengJiaAo MINGW64 /j/testfile
#查看文件:有3个文件夹
$ ls
demo/ demo2/ local_test/
#克隆远程已有仓库地址
$ git clone https://github.com/zhengjiaao/git_test.git
Cloning into 'git_test'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
#查看:多了一个文件夹 git_test
$ ls
demo/ demo2/ git_test/ local_test/
#进入文件夹
$ cd git_test/
#查看:有一个README.md文件
$ ls
README.md
#向 README.md文件追加内容
$ echo "### 测试k克隆远程已有仓库及推送此内容到远程仓库" >> README.md
#查看状态 :README.md 字体是红色:说明工作区修改后-->还没有添加至暂存区
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: README.md
no changes added to commit (use "git add" and/or "git commit -a")
#添加 README.md文件到暂存区
$ git add README.md
warning: LF will be replaced by CRLF in README.md.
The file will have its original line endings in your working directory
#将暂存区所有内容commit提交到本地仓库
$ git commit -m "commit: 推送到远程仓库"
[master 44a593d] commit: 推送到远程仓库
1 file changed, 1 insertion(+)
#将本地commit提交的内容 全部推送到远程仓库
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 344 bytes | 172.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/zhengjiaao/git_test.git
c02fd60..44a593d master -> master
推送完成看下github远程仓库效果:刷新页面
github创建公共仓库4.png
可以看出,我们修改的文件内容已推送到GitHub的远程仓库上
5、标签管理
在版本库里打个标签,将来在某一时刻想要之前的版本,我们就可以根据标签取出想要的版本.
常用命令:
#查看所有标签名称
$ git tag
#查看标签的详细信息(包含commit的信息)
$ git show tagname
#显示标签名及其描述信息
$ git tag -ln tagname
#创建标签,默认是根据最新的commit打标签,也可以指定某个commit_Id打标签
$ git tag tagname
#指定某个commitId创建标签
git tag tagname commit_Id
#指定提交信息,创建标签同时添加说明信息
$ git tag -a tagname -m "comment"
#切换至指定标签,在某个标签上继续开发
$ git checkout tagname
#退出标签,切换到指定分支即可
$ git checkout branchname
#推送某个标签到远程
$ git push origin tagname
#推送所有尚未推送的本地标签
$ git push origin --tags
#删除本地指定标签 仅删除本地
$ git tag -d tagname
#删除远程仓库的指定标签
$ git push origin -d tag tagname
#获取远程某个标签信息(没有获取代码)
$ git fetch origin tag tagname
选用一个项目测试标签:
进入一个本地仓库:这里选用之前测试用到的git_test仓库
Administrator@ZhengJiaAo MINGW64 /j/testfile/git_test (master)
#查看文件
$ ls
README.md
#查看文件内容
$ cat README.md
# git_test
### 测试k克隆远程已有仓库及推送此内容到远程仓库
#向文件追加内容
$ echo "## 标签测试 1" >> README.md
#查看状态:README.md红色 ,工作区修改了文件未添加到暂存区
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: README.md
no changes added to commit (use "git add" and/or "git commit -a")
#将修改的文件
$ git add README.md
warning: LF will be replaced by CRLF in README.md.
The file will have its original line endings in your working directory
#将暂存区内容提交到本地仓库
$ git commit -m "commit:标签测试1 提交"
[master b1070cb] commit:标签测试1 提交
1 file changed, 1 insertion(+)
#查看状态
$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
#推送到远程仓库
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 317 bytes | 317.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/zhengjiaao/git_test.git
44a593d..b1070cb master -> master
github远程仓库效果:
github标签测试1.png
创建标签并推送至远程仓库:
命令:
#创建本地标签
$ git tag tagname
#将创建的本地标签推送到远程仓库
$ git push origin tagname
命令演示:
Administrator@ZhengJiaAo MINGW64 /j/testfile/git_test (master)
#查看标签
$ git tag
#创建标签
$ git tag v1.0.1
#查看标签
$ git tag
v1.0.1
#将本地标签推送到github远程仓库
$ git push origin v1.0.1
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/zhengjiaao/git_test.git
* [new tag] v1.0.1 -> v1.0.1
标签推送到远程仓库成功!
注:当修改的代码没有commit,也能打标签,但不会将工作区修改的内容打进标签,只有将修改的内容commit后才会打进标签中,然后提交标签到远程。
1、工作区修改的代码,没有commit,也能打标签,但是标签不包含工作区修改的代码
2、工作区修改的代码,commit保存,可以将修改的代码打进标签,然后推送到远程,远程标签中也存在修改的代码,但若没有push本次commit信息到远程分支,远程分支是不会有commit提交信息
github查看标签:
github标签测试2.png
删除标签:
命令:
#删除本地指定标签 仅删除本地
$ git tag -d v1.0.1
#删除远程仓库的指定标签
$ git push origin -d tag v1.0.1
命令演示:
Administrator@ZhengJiaAo MINGW64 /j/testfile/git_test (master)
#查看标签
$ git tag
v1.0.1
#删除本地指定标签 仅删除本地
$ git tag -d v1.0.1
Deleted tag 'v1.0.1' (was b1070cb)
#查看标签:发现标签 v1.0.1 已不存在
$ git tag
#删除远程仓库的指定标签
$ git push origin -d tag v1.0.1
To https://github.com/zhengjiaao/git_test.git
- [deleted] v1.0.1
切换到指定标签-->创建新的分支:
命令:
#切换至指定标签
$ git checkout tagname
#退出标签,切换到指定分支即可
$ git checkout branchName
#切换至指定标签,在某个标签上继续开发,开发完成可以创建新的分支
$ git checkout tagname
#这是git的最新版的命令:创建分支并切换至新分支
$ git switch -c branchName
6、分支管理
分支操作常用命令:
git branch #显示所有本地分支,
*
是当前分支
git branch -r #显示所有远程分支
git branch -a #显示所有分支(本地和远程)git branch -v #显示本地分支最近一次提交信息
git branch -a -v #显示左右分支最后一次提交信息git merge <name> # 合并某分支到当前分支
git branch --merged # 已经合并的分支列表,git branch -d 可删除成功
git branch --no-merged # 未合并的分支列表,删除不成功,-D
选项强制删除它git branch <name> # 创建新分支
git checkout <name> # 切换到指定分支
git checkout -b <name> # 从本地已有的当前分支-->创建新分支->切换至新分支 相当于上面两步操作
git checkout -b dev origin/dev # 从远程已有分支-->创建新分支->切换至新分支,并与远程分支关联
git switch <name> # 切换分支(推荐,但git需要升级到最新版本),没有分支不会自动创建
git switch -c dev # 创建并切换新分支或直接切换已有分支上 (推荐,但是git需要升级到最新版本)git merge dev #合并分支
git branch -d dev #删除已经合并的分支,未合并的分支删除不了
git branch -D dev #强力删除分支,会丢掉未合并的内容
Git鼓励大量使用分支流程:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
或者git switch <name>
创建+切换分支:git checkout -b <name>
或者git switch -c <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
本地仓库的分支创建、合并、删除:
#查看分支
$ git branch
* master
#从当前master创建新分支dev
$ git branch dev
#查看分支
$ git branch
dev
* master
#修改dev分支中test文件内容
$ echo "dev修改文件内容" >> test.txt
#将修改内容添加至暂存区,让git版本库管理
$ git add test.txt
#将暂存区内容提交到本地仓库
$ git commit -m "dev修改text内容"
[dev 7e62af8] dev修改text内容
1 file changed, 1 insertion(+)
#切换至master分支
$ git switch master
#当前master合并dev分支内容
$ git merge dev
Updating 4115cf8..7e62af8
Fast-forward
test.txt | 1 +
1 file changed, 1 insertion(+)
#查看test文件内容
$ cat test.txt
dev修改文件内容
#删除dev分支,必须是已经合并成功,不然删除不掉dev分支,强力删除可以用 -D
$ git branch -d dev
Deleted branch dev (was 7e62af8).
#查看分支
$ git branch
* master
创建本地仓库分支并上传到远程仓库:
#查看所有分支(本地和远程)
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
#新建本地dev分支
$ git switch -c dev
Switched to a new branch 'dev'
#远程没有dev分支,本地有dev
$ git branch -a
* dev
master
remotes/origin/HEAD -> origin/master
remotes/origin/master
#将本地dev分支推送到远程仓库
Administrator@ZhengJiaAo MINGW64 /j/testfile/git_test (dev)
$ git push --set-upstream origin dev
Total 0 (delta 0), reused 0 (delta 0)
remote:
remote: Create a pull request for 'dev' on GitHub by visiting:
remote: https://github.com/zhengjiaao/git_test/pull/new/dev
remote:
To github.com:zhengjiaao/git_test.git
* [new branch] dev -> dev
Branch 'dev' set up to track remote branch 'dev' from 'origin'.
#推送成功 :remotes/origin/dev
$ git branch -a
* dev
master
remotes/origin/HEAD -> origin/master
remotes/origin/dev
remotes/origin/master
删除仓库分支:
git branch -d <branch-name> 删除分支
git push origin --delete <branch-name> 删除远程分支
#查看所有分支
$ git branch -a
* dev
master
remotes/origin/HEAD -> origin/master
remotes/origin/dev
remotes/origin/master
#删除远程仓库分支
$ git push origin --delete dev
To github.com:zhengjiaao/git_test.git
- [deleted] dev
#查看所有分支:发现远程仓库已经没有dev分支
$ git branch -a
* dev
master
remotes/origin/HEAD -> origin/master
remotes/origin/master
#切换到master分支
$ git switch master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
#删除本地分支,注意dev分支要是已合并的分支,不然删除报错,可以用 -D 强力删除,但会丢失dev开发的代码,所以要先合并分支,再删除分支
$ git branch -d dev
Deleted branch dev (was b1070cb).
#查看所有分支:发现本仓库已没有dev分支
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
7、远程仓库管理
远程仓库添加、重命名、删除等操作。
命令:
#查看远程仓库别名或路径
$ git remote
$ git remote -v
#删除关联的远程仓库路径
$ git remote rm origin
#添加远程仓库:origin远程仓库别名,url远程仓库地址
$ git remote add origin url
#修改远程仓库别名
$ git remote rename origin oldorigin
$ git remote
oldorigin
#添加多个远程仓库
$ git remote add origin url
$ git remote
oldorigin
origin
本地仓库和远程仓库:
#本地删除远程仓库
$ git remote rm origin
#发现已经没有远程仓库
$ git remote
#添加远程仓库
$ git remote add origin git@github.com:zhengjiaao/git_test1.git
#查看远程仓库
$ git remote
origin
#远程仓库重命名
$ git remote rename origin oldorigin
$ git remote
oldorigin
#添加多个远程仓库
$ git remote add origin git@github.com:zhengjiaao/git_test2.git
$ git remote
oldorigin
origin
多个远程仓库推送和下拉需要指定仓库别名 如:
git pull origin master
git pull oldorigin master
git push origin master
git push oldorigin master
一次推送到多个远程仓库:
上面是不是感觉麻烦,两个远程仓库要推送两次,也可以一次推送到多个远程仓库:
命令:
#url 是第二个(或大于第二个)远程仓库
$ git remote set-url --add origin url
命令演示:
#有一个远程仓库
$ git remote -v
origin git@github.com:zhengjiaao/git_test.git (fetch)
origin git@github.com:zhengjiaao/git_test.git (push)
#添加第二个远程仓库
$ git remote set-url --add origin git@github.com:zhengjiaao/git_test2.git
#查看发现多了一个远程仓库,别名都是origin 一致的
$ git remote -v
origin git@github.com:zhengjiaao/git_test.git (fetch)
origin git@github.com:zhengjiaao/git_test.git (push)
origin git@github.com:zhengjiaao/git_test2.git (push)
一次推送到多个远程仓库 如:
git push origin master