基础介绍
http://git-scm.com/
git分布式版本控制系统,不需要联网,一个电脑上就是一个版本库
add 就是把修改的内容存到暂存区,可以存多个修改的内容,然后最后commit到分支,暂存区就干净了
当文件被添加到过暂存区就会跟踪它的修改
每次提交的是暂存区的修改,如果修改了一次后add了,再修改直接commit,提交的是暂存区中的,新修改的并没有提交
dev从master分出来,查看log日志会连同主分支的一起查看,单独查看dev的提交可以 git log dev..master
dev被merge后再切回去,无法查看它的log信息,要是想查看就合并的时候
git merge --no-ff -m "合并后删除分支,保留分支信息"。
注意
千万不要使用Windows自带的记事本编辑任何文本文件,可下载notepad++
基本配置
1.全局配置提交的个人信息
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
2.给项目初始化一个git
git init
3.添加文件到Git仓库,分两步:
git add <file>
,注意,可反复多次使用,添加多个文件;
git commit -m <message>
,完成。
4.查看git状态
git status
如果显示红色就说明没有修改了没有add
如果显示绿色则说明add了没有commit
5.查看修改内容
git diff
6.版本回退
git reset --hard commit_id
git revert --hard com
例子:
上一个版本就是HEAD^,上上一个版本就是HEAD^^,
当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
7.查看提交日志
git log
git log --pretty=oneline
git reflog
查看命令历史,以便确定要回到未来的哪个版本
8.查看区别
git diff filename
:比较工作区和暂存区
git diff HEAD -- filename
:比较工作区和版本库的最新版本
9.撤销修改
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
。
git checkout -- file
要是暂存区有就恢复暂存区版本,要是没有就恢复版本库的版本
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>
,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
10.删除文件恢复
前提:之前add过到暂存区
误删想要恢复:git checkout -- <file>
会恢复到版本库中最新的版本文件,但会丢失没有提交的部分
11.查看远程信息
git remote -v
12.建立本地分支和远程分支的关联
git branch --set-upstream branch-name origin/branch-name
13.本地推送分支
git push origin branch-name
远程仓库
1.获取到此电脑的key
ssh-keygen -t rsa -C "youremail@example.com"
按照提示到电脑找到id_rsa.pub,复制到你的github上,以后就可以验证是否是本人提交
2.本地仓库与github连接,这样本地仓库就能提交到相应的仓库
git remote add origin git@github.com:michaelliao/learngit.git
3.本地内容提交到github上
第一次提交
git push -u origin master
以后
git push origin master
警告
当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告:
The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?
输入yes
3.从远程库克隆
git clone git@github.com:michaelliao/gitskills.git
分支
基本用法
查看分支:git branch
查看分支对应的远程分支: gti branch -vv
创建分支: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 log --graph
可以看到分支合并图
当主分支和dev分支分别进行修改并commit时,mer时要是发现两个分支修改同一处代码,就会冲突
冲突就会出现这个,手动修改并merge
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1
分支管理策略
Git会用Fast forward
模式,但这种模式下,删除分支后,会丢掉分支信息
禁用fast forward
git merge --no-ff -m "merge with no-ff" dev
bug分支
前提:
当在分支写了一半没有提交时,要转到其他分支写完要提交,如果直接提交会把例外分支没提交的也提交了
所以如果没commit就可以git stash
把工作区清理
如果回到分支就恢复git stash pop
在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit>
命令,把bug提交的修改“复制”到当前分支,避免重复劳动。
feature分支
强行删除分支
git branch -D <name>
rebase
标签管理
标签可以知道打标签时的版本
1.创建标签
git tag v1.0
2.查看标签
git tag
3.查看标签信息
git show <tagname>
4.指定标签信息
git tag -a <tagname> -m "blablabla..."
5.指定相应的commit打标签
git tag v0.9 f52c633
6.删除标签
git tag -d v0.1
7.删除一个远程标签
git push origin :refs/tags/<tagname>
8.推送全部未推送过的本地标签
git push origin --tags
9.推送一个本地标签
git push origin <tagname>
常见问题
- 将本地内容错误上传远程库,远程库要倒退版本
- https://blog.csdn.net/yxlshk/article/details/79944535
-
使用
git revert 版本
//撤销某个提交带来的修改 -
撤销HEAD指针之前的第3个提交,并且生成一个新的提交。
git revert HEAD~3
-
撤销从master之前第5个提交到之前第3个提交的变化(这么看来,前面是开区间,第6个没有被包含;后面是闭区间,包含了第3个
git revert -n master~5..master ~ 2
-
使用
git reset 版本
1. git checkout the_branch # 切换到这个分支
2. git pull # 拉取
3. git branch the_branch_backup # 备份一下这个分支当前的情况
4. git reset --hard the_commit_id # 把the_branch本地回滚到the_commit_id
5.git push origin :the_branch # 删除远程分支the_branch
6.git push origin the_branch:the_branch # 使用回滚之后的分支重新建立远程分支
5. git push origin :the_branch_backup # 如果前面的都成功了 删除这个分支