以前项目都用svn,最近用Git,但是本人对Git懵懵懂懂,所以特意安静下来,对Git做个简单的学习,在网上找到了廖雪峰老师的写的Git教程,网址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
花了一天的时间进行学习,把廖老师提到的命令进行总结记录了一下,方便以后快速阅读、查看。下面描述的也可以通过优快云进行下载,下载地址:https://download.youkuaiyun.com/download/zhengdesheng19930211/10293634
1.创建版本库
git init
2.文件添加到仓库
git add test.txt
git commit -m ''
3.查看历史提交记录
git log 或者 git log --pretty=oneline
4.查看命令历史
git reflog
5.版本回退(假设现在已经提交了三个版本,版本ID分别为01wer,43refsd,453trt)
回退到上一个版本:git reset --hard HEAD^
回退到上上个版本:git reset --hard HEAD^^
回退到上100个版本:git reset --hard HEAD~100
根据版本ID来回退:git reset --hard 版本ID
6.查看git状态
git status
7.git add是把文件提交到暂存区(stage) git commit是把文件提交到版本库
8.比较工作区和版本库的区别
git diff HEAD -- test.txt
9.每次修改,如果不add到暂存区,那就不会加入到commit中。
10.当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时
git checkout -- test.txt
命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是test.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是test.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
11.当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改
git reset HEAD test.txt
git checkout -- test.txt
12.删除版本库文件
git rm test.txt
git commit -m ''
13.恢复本地误删的文件恢复到最新版本
git checkout -- test.txt
14.推送到远程,首先可以把ssh的公钥添加到远程仓库
15.在本地的仓库关联到github远程仓库:
git remote add origin git@github.com:zhengdesheng/git_study
git push -u origin master //当执行该命令如果出现failed to push some refs to 'git@github.com:zhengdesheng/git_study.git'错误,需要先pull远程工程,命令是git pull origin master,如果该命令出现fatal: refusing to merge unrelated histories错误,因为他们是两个不同的项目,要把两个不同的项目合并,git需要添加一句代码,在git pull,这句代码是在git 2.9.2版本发生的,最新的版本需要添加--allow-unrelated-histories,正确的命令应该是git pull origin master --allow-unrelated-histories,之后再次执行git push -u origin master
16.克隆远程仓库
git clone git@github.com:zhengdesheng/StudyGit.git
Git支持多种协议,包括https,但是通过ssh支持的原生git协议速度最快
17.分支
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
用git log --graph命令可以看到分支合并图
禁用fast-forward合并分支:合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息
18.bug 分支
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场
git stash
然后去修复bug,修复后,可以通过
git stash list
查看原来stash的内容,之后可以通过
git stash pop 或者
git stash apply stash@{0} //执行后者命令的时候stash的内容不会删除,需要执行git stash drop来删除
回到工作现场
19.Feature分支
丢弃一个没有被合并过的分支:
git branch -D <name>
20.查看远程仓库信息
git remote 或者 git remote -v
21.多人协作
查看远程库信息,使用git remote -v;
本地新建的分支如果不推送到远程,对其他人就是不可见的;
从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
22.标签管理
git tag <name>
寻找历史体检的commit id
git log --pretty=oneline --abbrev-commit
对某次提交的版本进行版本标签管理
git tag <name> commit_id
查看标签信息
git show <tagname>
创建带有说明的标签,用-a指定标签名,-m指定说明文字
git tag -a <version> -m '' commit_id
删除本地仓库的标签
git tag -d <tagname>
推送到远程
git push origin <tagname>
一次性推送全部尚未推送到远程的本地标签
git push origin --tags
删除远程仓库的标签
git tag -d <tagname> //删除本地仓库的版本号
git push origin :refs/tags/<tagname> //删除远程的标签
本地同步远程的标签
git fetch --tags
23.文件忽略
忽略某些文件时,需要编写.gitignore;
.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!
以上就是我总结的,有少许东西是自己补充的,里面有可能很多不足,忘各位进行指正!