Git版本库:
基本流程:(github上传文件基本流程)
1.touch README.md
2.git init
3.git add README.md
4.git commit -m "first commit"
//添加远程仓库
5.git remote add origin https://github.com/cmathx/learngit.git
//第一次推送本地文件到远程仓库,并将本地的master分支和远程的master分支关联起来,后续的推送命令只需要git push origin master
6.git push -u origin master
//修改情况审查
1.git status:查看仓库当前状态
2.git diff README.md:查看README.md的修改情况,查看工作区和当前情况的区别
3.git diff HEAD -- readme.md:查看工作区和版本库里最新版本的区别
//版本回退,撤销修改,删除文件
1.git log:查看commit提交记录,具体每次提交情况
2.git reset –hard HEAD^:回退到上一个版本的commit记录
3.git reflog:查看commit版本id号,以便于版本回退
4.git reset –hard commit_id:回退到某个指定的commit版本
5.git checkout –- readme.md:撤销修改,撤销修改回到暂存区状态(修改后未保存到暂存区)或者撤销修改回到和版本库一模一样的状态(已经添加到暂存区后又做了修改) 附:误删除文件后也可以通过这条命令恢复
6.rm readme.md
git rm readme.md:彻底删除readme.md
//分支管理
//
创建和合并分支
1.
查看分支:
git branch
2.
创建分支:
git branch feature1
3.
切换分支:
git checkout feature1
4.
创建
+
切换分支:
git checkout -b feature1
5.
合并某分支到当前分支:
git merge feature1
6.
删除分支:
git branch -d feature1
//
解决分支冲突
1.git merge feature1
如果存在冲突,会有
conflict
提示,有冲突的文件
git
会用“
<<<<<<<
,
=======
,
>>>>>>>
”标示出不同分支的内容
PS
:通常合并分支,
Git
会用“
Fast foeward
”模式,但是这种模式删除分之后,会丢失分支信息
2.git merge –no-ff –m “merge no-ff” feature1
3.git log --graph --pretty=oneline --abbrev-commit
查看合并分支图
4.
git log --pretty=oneline --abbrev-commit
查看所有的
commit
情况,没有图说明
//Bug
分支:恢复现场
场景:现在有一个
bug101
需要修改,自然想法是创建一个
issue-bug101
进行修改
bug
;可是当前还在
dev
上工作,而且工作还未完成,我们不想进行
commit
一个版本,所以需要保存
dev
当前的工作现场,然后转而修复
bug
,而后再转向
dev
现场,恢复之前保存的
dev
工作现场,继续进行我们的工作。
1.git stash
存储当前工作现场
2.git status
此时查看文件,则工作区是干净的,因为
git stash
命令把工作现场保存起来了
3.git checkout master
切换回主分支
4.git checkout –b issue-bug101
创建新分支并切换到分支
issue-bug101
5.git commit –am “fix bug 101”
修改提交新版本
6.git checkout master
切换回主分支
7.git merge –no-ff –m “merge bug fix 101” issue-bug101
将新分支修改的版本合并到主分支
8.git branch –d issue-bug101
删除分支
issue-bug101
9.git checkout dev
切换回原本的工作分支
dev
10.git stash list
查看保存的工作现场
11.
恢复工作现场
11.1.git stash apply
恢复工作现场,但是
stash
(工作现场)内容并不删除
git stash drop
删除
stash
内容
11.2.git stash pop
恢复现场并将
stash
内容删除
PS
:
git stash apply stash@{0}
恢复指定的
stash
(工作现场)
//feature
分支
现在需要添加一种新功能,所以我们新建了一个
new_feature
分支,并在上面进行添加我们所需要的
feature
,而后接到新的需求,不需要此项
feature
,所以我们此时不能将
new_feature
分支合并到主分支,然而我们还是需要将
new_feature
分支删除,此时
git branch –d new_feature
会报错,显示
new_feature
还未合并。
git branch –D new_feature
强行删除不需要的分支
new_feature
//
多人协作
git remote
查看远程库的信息
git remote –v
显示远程库抓取和推送的地址。如果没有推送权限,就看不到
push
的地址
git push origin master(dev)
推送本地仓库到远程仓库
master(
或
dev)
分支
第一次从远程库
clone
时,默认情况下,只能看到主分支
git branch
只显示主分支
git checkout –b dev origin/dev
添加本地分支
dev
并和远程仓库的
dev
关联起来,而后就可以在本地
dev
分支上继续修改,并将
dev
分支
push
到远程
注意:冲突解决
场景:
2
个团队成员同时修改某个文件,并且都将其
push
到远程仓库,这样修改不一样的地方就会发生冲突,后者
push
到远程仓库时,
git
会提示
push
失败,需要
git pull
下来,在本地解决完冲突,最后再
push
到远程仓库
//
分支管理策略
master
:主分支
dev
:开发分支,团队所有成员都需要在上面工作
bug
:用于修复
bug
feature
:用于添加新的
feature
,可以和团队成员合作在这上面添加新的
feature
//
标签管理
git tag tagname
对当前
commit
版本打
tag
git tag tagname commit_id
对特定
commit_id
版本打
tag
git show tagname
查看标签信息
git tag –a tagname –m “tag explanation” commit_id
对特定
commit_id
版本打
tag
,并进行说明
git tag –s tagname –m “tag explanation” commit_id
对特定
commit_id
版本打
tag
,并进行说明,用
PGP
签名标签
git tag –d tagname
删除标签
git push origin tagname
推送标签到远程
git push origin –tags
一次性推送全部尚未推送到远程的本地标签
如果标签已经推送到远程,需要删除远程标签
git tag –d tagname
删除本地
tag
标签
git push origin :refs/tags/tagname
删除远程标签
//git
快捷键配置
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
而后
git lg
就可以查看提交的
commit
各种详情
git log -10
查看最新的
10
条
commit
版本信息
//
替换本地改动
假如你想要丢弃你所有的本地改动与提交,可以到服务器上获取最新的版本并将你本地主分支指向到它:
git fetch origin git reset --hard origin/master