流程图
Remote | 远程仓库 | 也就是git仓库 |
---|---|---|
Repository | 本地仓库 | 使用init创建的本地仓库 |
Index | 缓存区 | 使用add提交到Index暂存区 |
workplace | 工作区 | 也就是电脑上显示的目录 |
add | 添加 | 将文件添加到Index缓存区 |
commit | 提交 | 将Index中的代码提交到本地仓库 |
push | 推送 | 将本地代码推送到远程 |
clone | 克隆 | 使用clone能够从git仓库拷贝项目到本地 |
fetch | 拉取 | 使用fetch能够获取远程分支的改动 |
checkout | 切换分支 | 切换不同的分支到工作区 |
pull | 拉取分支 | 直接将远程分支拉取到本地当前分支 |
需求
从需求来了解git命令
需求1:获取远程代码
1.克隆远程仓库
git clone url
需求2:提交代码到本地仓库
git status 查看状态
git diff查看改变内容
git add . 跟踪所有改动过的文件
git add <> 跟踪指定文件
git mv <old> <new> 文件改名
git rm <file> 删除文件
git rm --cached <file> 停止跟踪文件但不删除
git commit -m "commit message" 提交所有更改过的文件
git commit --amend 修改最后一次提交
需求3:远程操作
git remote -v 查看远程版本库信息
git remote show <remote> 查看指定远程版本库信息
git remote add <remote> <url> 添加远程版本库
git fetch < remote> 从远程库获取代码
git pull <remote> <branch> 下载代码及快速合并
git push <remote> <branch> 上传代码及快速合并
git push <remote> :<branch/tag-name> 删除远程分治或标签
git push --tags 上传所有标签。
需求4:分支与标签的操作
git branch 显示所有本地分支
git branch <new-branch> 创建新分支
git branch -d <branch> 删除所有本地分支
git checkout <branch/tag> 切换到指定分支或标签
git tag 列出所有本地标签
git tag <tagname> 基于最新提交创建标签
git tag -d <tagname> 删除标签
需求5:合并与衍合
git merge <branch> 合并指定分支到当前分支
git rebase <branch> 衍合指定分支到当前分支
需求6:查看log
git log 查看提交历史
git log -p <file> 查看指定文件的提交历史
git blame <file> 以列表的方式查看指定文件的提交历史
需求7:撤销操作
git reset --hard HEAD 撤销工作目录中所有未提交文件的修改内容
git checkout HEAD <file> 撤销指定文件未提交的内容
git resert <commit> 撤销提价的内容
流程
0.获取远程仓库并上传项目到分支
0.创建本地仓库
进入一个你想作为仓库的目录(如 Git_Repo/),初始化仓库:
git init
1.创建分支
每个分支的状态都是独立的,所以要先创建分支再获取远程仓库,如果不创建分支,则默认是在master分支下,现在创建一个分支branch0
git branch branch0
2.获取远程仓库
在这一步之前要,进行远程仓库的连接(见1.连接远程仓库),然后获取远程仓库,你需要给远程仓库一个本地的命名如remote0,这个命名只用于本分支。url为远程仓库的url。
git remote add remote0 'url'
3.显示此时有哪些远程仓库
git remote -v
4.同步本地仓库的分支与远程仓库要管理的分支
就是将远程分支复制到本地仓库,分两步:
1.拉取本地没有的数据
git fetch remote0 master
2.合并分支
git merge remote0 master :[本地分支] 合并到本地分支
git merge remote0 master 合并到当前分支
此时,分支数据已经同步,此时可以进行更改。
5.添加所有更改或文件到index缓存
git add .
6.提交数据到本地仓库
引号内是对本次提交的注释,一定要有。
git commit -m '第一次提交数据'
此时,本地分支是更改后的项目,需要推送到远程分支
7.推送数据到远程分支
git push remote0 master : [本地分支] 推送本地分支数据到远程master分支
git push remote0 master 默认推送当前分支到远程的master分支
8.上传成功。
如果遇到错误 ! [rejected] master -> master (non-fast-forward),转到2.push出错
1.连接远程仓库
1.创建密匙
$ ssh-keygen -t rsa -C "邮箱"
2.安装密匙
复制rsa.pub的密匙到git的密匙添加中
3.测试连接
$ ssh -T git@github.com
2.push出错
此错误的主要原因还是,远成分支和本地分支的数据不同步。
解决方法,直接拉取最新版的远程分支数据到本地的工作区,再从add那一步再走一遍
git pull origin master --allow-unrelated-history
3.文件管理:
0.创建本地仓库(在本地仓库的目录下,才能进行git操作)
git init
1.获取远程项目
git clone url
2.显示远程项目
ls
3.创建文件,
touch test1.txt
4.显示本地仓库文件的状态:新增的文件前会有 ?? -s表示以简短的信息输出,如:A,AM,??。
git status -s
5.将文件添加到本地的缓存区:添加到缓存区的文件的status为 A
git add test1.txt
6.修改缓存区的文件,修改后,文件的statud是AM,需要再次进行add操作
vim test.txt
7.查看缓存区与未写入缓存区的文件的区别,改动
git diff
8.使用commit进行提交,由于每次提交都需要记录电子邮箱和名字,所以要先配置用户名和邮箱地址。
$ git config --global user.name 'runoob'
$ git config --global user.email test@runoob.com
9.使用commit进行提交,-m命令选项用以在命令行中提供注释
git commit -m '提交test1'
10.使用rm 移除文件,
git rm <file> 移除文件
git rm -f <file> 如果文件已经修改并暂存到缓存中,需要用强制删除
git rm --cache README 仅清除缓冲区的文件
git rm -r * 递归删除*的所有目录
11.对文件进行修改使用mv
git mv REDMAE README.md
4.远程仓库管理:
1.创建密匙
$ ssh-keygen -t rsa -C "邮箱"
2.安装密匙
复制rsa.pub的密匙到git的密匙添加中
3.测试连接
$ ssh -T git@github.com
4.初始化本地仓库的几步
mkdir <file>
chmod README
git init
git add README
git commit -m '备注信息'
5.提交本地仓库的文件到远程仓库
git remote add name 'url' 将远程仓库(url)添加到本地,name为自己定义的名称
git push -u origin master 将本地master分支的内容提交到remote中的仓库中
6.查看远程仓库,添加-v可以显示远程仓库的url
git remote -v
7.提取远程仓库
git fetch
8.获取远程仓库中的数据,并合并到本地所在任意分支
git fetch [alias] 获取本地仓库没有的数据
git merge [alias]/[branch] 将服务器上的任何更新合并到当前分支
例:git fetch origin
git merge origin/master
9.将数据推送到远程仓库
git push [alias][branch] 推送新分支与数据到远端仓库
例:git push origin master
10.删除远程仓库
git remote rm [别名]
例:$ git remote -v
origin git@github.com:tianqixin/runoob-git-test.git (fetch)
origin git@github.com:tianqixin/runoob-git-test.git (push)
# 添加仓库 origin2
$ git remote add origin2 git@github.com:tianqixin/runoob-git-test.git
$ git remote -v
origin git@github.com:tianqixin/runoob-git-test.git (fetch)
origin git@github.com:tianqixin/runoob-git-test.git (push)
origin2 git@github.com:tianqixin/runoob-git-test.git (fetch)
origin2 git@github.com:tianqixin/runoob-git-test.git (push)
# 删除仓库 origin2
$ git remote rm origin2
$ git remote -v
origin git@github.com:tianqixin/runoob-git-test.git (fetch)
origin git@github.com:tianqixin/runoob-git-test.git (push)
小结
从远程获取数据时:git pull 和 git fetch的区别:
git fetch:
git fetch origin master:temp 将远程的master分支下载到temp分支中
git diff temp 比较temp和本地master代码的区别
git merge temp 将temp合并到master主分支中
git branch - d temp 删除temp分支
直接使用fetch的话,需要两步:
1.获取远程分支的数据到本地分支,可以选择下载到哪个分支。
2.比较分支与master分支的不同,再进行合并。
git pull:
git pull <远程主机名> <远程分支名>:<本地分支名> 冒号前面的参数1<=2个,后面的参数<=1个
例:git pull remote master 将远程的master下载到本地的master
相当于git fetch 和 git merge
在实际应用中,git fetch 更加安全一些,
因为在merge之前可以查看diff,再决定是否合并。