git学习
阅读数:493 评论数:0
跳转到新版页面分类
git
正文
一、设置
#设置一些全局量的值
git config --global
git config --global user.name "cuihs"
git config --global user.email "cuisxxx@163.com"
#然后执行,之后只要有密码认证成功就会被保存
git config --global credential.helper store
#之后就不用每次都输入用户名和密码了
#如果修改了密码,需要清除凭证
git config --global --unset credential.helper
#除了--global,凭证还可以--system --local
# 查看全部设置
git config --global --list
二、使用
#创建版本库
git init
#添加文件
git add .或指定文件
#提交
git commit -m 'first commit'
#新文件的提交到修改后的提交是一样的,都是先git add ,然后git commit
#上传
git push -u origin master
#查看变更内容
git diff
# 比较两个分支,显示出所有差异的文件列表
git diff branch1 branch2 --stat
# 比较两个分支,显示指定文件的详细差异
git diff branch1 branch2 文件名(带路径)
# 比较两个分支,显示出所有有差异的文件的详细差异
git diff branch1 branch2
#跟踪所有改动过的文件
git add .
#跟踪指定的文件
git add file
#文件改名
git mv old new
#删除文件
git rm file
# 停止跟踪文件但不删除
git rm --cached file
#查看哪些文件是新添加的,哪些文件已加入暂存区域的
git status
有两种分支比较有用:(1)支持项目的不同发布版本的分支(2)支持一个特定功能的开发的分支
# 新分支名和父分支名称
git branch RB_1.0 master
# 查看所有分支
git branch -a
#查看当前使用分支
git branch
#切换分支
git checkout 分支名
# 把命名为branchName的本地分支推送到服务器
git push origin branchName
#提示代码到远程服务器上命名为branchName的分支
git push origin branchName
# 从远程分支上拉取代码
git pull origin branchName
#创建并切换分支
git checkout -b 分支名
#合并分支
先切换到master : git checkout master
git merge fenzhi (最后别忘了git push origin master)
可能会进入nano编辑提交页面,ctrl+x然后输入y再回车,就可以退出
#删除本地分支
git branch -d 分支名
#删除远程分支
git push origin --delete branch_name
#要想本地和远程都删除,必须要运行两个命令
#恢复分支
git branch 分支名 提交号
#查看分支图
git log --graph --pertty=oneline --abbrev-commit
#分支重命名
git branch -m 当前分支名 新分支名
#当我们发现本地分支信息没有更新时,可以通过下面的命令来更新一下分支信息
git remote update origin --prune
#更新分支
git pull origin 分支名
#推送
git add .
git commit -m "msg"
git push origin 分支名
# 远程版本库的位置 本地目录(可选)
git clone git://github.com/xxx/xx.git mydir
把要忽略的文件名加到.gitignore文件中,而且Git支持统配符,可以用通配符设置要忽略的文件名称。
只需要清空一下git本地的缓存提交一次即可。
git rm -r --cached .
git add .
git commit -m "fixed untracked files"
git push -u origin master
// 查看所有远程仓库地址
git remote -v
// 方式一,直接修改
git remote set-url origin xxx.git
//方式二,先删后加
git remote rm origin
git remote add origin xxx.git
获取特定远程仓库的 URL
git remote get-url origin
对于多分支的代码库,将代码从一个分支转移到另一个分支是常见的需求。
一种情况是,你需要另一个分支的所有代码变动,那么就采用git merge;另一种情况是,你只需要部分代码变动(某几个提交),这时可以采用cherry pick。
(1)基本用法
git cherry-pick <commitHash>
上面命令变会将指定的提交commitHash应用于当前分支。
a - b - c - d Master
\
e - f - g Feature
现在将提交f应用于master分支
# 切换到 master 分支
$ git checkout master
# Cherry pick 操作
$ git cherry-pick f
a - b - c - d - f Master
\
e - f - g Feature
git cherry-pick命令的参数,不一定是提交的hash值,分支名也是可以的,表示转移该分支的最新提交。
git cherry-pick feature
上面代码表示将feature分支的最近一次提交,转移到当前分支。
(2)转移多个提交
git cherry-pick <hashA><hashB>
如果想要转移一系列的连续提交,可以使用下面的简便语法
git cherry-pick A..B
上面的命令可以转移(A,B]的所有提交
git cherry-pick A^..B
上面的命令可以转移[A,B]的所有提交。
(3)配置项
-e, --edit | 打开外部编辑器,编辑提交信息。 |
-n,--no-commit | 只更新工作区和暂存区,不产生新的提交。 |
-x | 在提交信息的末尾追加一行(cherry picked from commit....),方便以后查到这个提交是如何产生的。 |
-s,--signoff | 在提交信息的末尾追加一行操作者的签名,表示是谁进行了这个操作 |
-m parent-number,--mailine parent-number | 如果原始提交是一个合并节点,来自于两个分支的合并,那么cherry-pick默认将失败,因为它不知道应该采用哪个分支的代码变动 |
(4)代码冲突
--continue | 用户解决冲突后,第一步将修改后的文件重新加入暂存区(git add .),第二步使用git cherry-pick --continue |
--abort | 发生代码冲突后,放弃合并,回到操作前的样子。 |
--quit | 发生代码冲突后,退出cherry pick,但不回到操作前的样子。 |
#查看提交历史
git log
# 查看指定文件的提交历史
git log -p file
# 以列表方式查看指定文件的提交历史
git blame file
#撤消所有未提交文件的修改内容
git reset --hard HEAD
#撤消指定的未提交文件的修改内容
git checkout HEAD file
#撤消指定的提交
git revert commit
当在一个分支上开发工作未完成,需要切换到另一个分支开发时,可以使用git stash保存这个修改。
git stash | 把当前修改保存,每次使用都会新加一个stash@{num} |
git stash save '注释' | 等同于git stash,会添加注释 |
git stash pop | 恢复git栈中最新的一个stash@{num} |
git stash list | 显示当前stash的所内容 |
git stash apply stash@{num} | 恢复内容到当前分支,但不会从堆栈中删除 |
git stash drop stash@{num} | 从堆栈中移除指定stash |
git stash show | 显示堆栈中最新保存的stash和当前目录的差异 |
Git 不会跟踪空目录。这是因为 Git 是一个内容跟踪系统,而不是一个文件系统跟踪工具。如果一个目录中没有文件,Git 就没有内容可以跟踪。
然而,在实际开发中,我们有时候希望能够上传一个空目录到 Git 仓库中,比如为了保持项目的目录结构。为了实现这一点,通常的做法是在这个空目录中添加一个 .gitkeep
文件。.gitkeep
不是 Git 的标准文件,它实际上是一个空文件,由开发者约定俗成地用来让 Git 跟踪空目录。
请注意,.gitkeep
文件不是 Git 的官方部分,它只是一个社区采纳的惯例。实际上,你可以使用任何文件名来跟踪空目录。另一个常见的惯例是在空目录中添加名为 .keep
的文件。
三、网络协议
1、ssh
git@github.com/yourreposi/project.git
2、git
git://github.com/yourrepo/project.git
3、http/https
http://github.com/yourrepo/project.git
四、Tag以及Branch的区别
每次正式版本上线后,用于上线的那一时刻,commit的代码拉出来作为tag。开发人员可继续在当前开发分支上开发,准备下一个sprint的上线。
如果突然有紧急上线,可以在最新版本的tag的基础上新建一个分支:
git branch <branch name> <tag name>
然后checkout一下,在这个分支上进行紧急上线的开发。开发完成,上线后将新的代码merge到开发分支上,继续开发。
1、查看标签,可以加上参数 -l(列表形式列出) -n(附加说明)
git tag [-l -n]
2、查看符合检索条件的标签
git tag -l 1..
3、查看对应标签状态
git checkout 1.0.0
4、创建带备注标签(推荐)
git tag -a 1.0.0 -m "这是备注信息"
5、删除标签(本地)
git tag -d 1.0.0
6、将本地所有标签发布到远程仓库
git push origin --tags
7、指定版本发送
git push origin 1.0.0