git命令详解

这里推荐廖雪峰的git教程,浅显易懂,循序渐进。
https://www.liaoxuefeng.com/wiki/896043488029600
还有对git与svn的比较
https://www.cnblogs.com/Sungeek/p/9152223.html

1. 创建版本库

通过git init把某个目录变为Git可以管理的仓库,执行完会发现目录下多了.git文件。这个文件记录着该工作区的版本库。

$ git init
2.修改文件后尝试提交版本库
$ git status //查看文件变更状态
$ git diff HEAD --  //查看本地工作区和版本库最新版本的区别
$ git add   //提交到暂存区
$ git commit -m "xxxxx"     //提交到版本库,-m后面输入的是本次提交的说明

若要丢弃某些修改

$ git checkout --   //丢弃工作区的修改
//这里有两种情况:
//1.自修改后还没有被放到暂存区,撤销修改就回到和版本//库一模一样的状态;
//2. 已经添加到暂存区后,又作了修改,撤销修改就回到添加到暂存区后的状态
$ git reset HEAD  //丢弃暂存区的修改,将修改撤回的工作区
3. 版本回退

查看版本库信息

$ git log  //查看版本库信息
$ git log --pretty=oneline  //查看版本库信息,以一行显示
$ git reflog //记录每一次命令,包括记录和回退

回退
在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本可写成HEAD~100

$ git reset --hard HEAD^ //回退到上一个版本
$ git reset --hard 1094a  //回退到某一个版本,commit ID的前几位
4.将本地文件推送到远程github仓库
//首先在github上建立一个learngit远程库,再与本地关联。
$ git remote add orign [email protected]:xxxxx/learngit.git
//orign远程仓库的名字,默认
//com:个人账户名
$ git push -u name master // 将本地库推送到远程库orign上的master分支,
//第一次加-u参数

从远程克隆仓库到本地

$ git clone [email protected]:michaelliao/gitskills.git  //使用ssh
$ git clone https://github.com/michaelliao/gitskills.git  //使用http

更新远程仓库的代码

git pull
5.分支管理
$ git branch //查看分支

$ git branch  //创建分支

$ git checkout //切换分支
$ git switch  //切换分支

$ git checkout -b  //创建+切换分支
$ git switch -c  //创建+切换分支

$ git branch -d   //删除分支
$ git merge  //合并某分支到当前分支
$ git merge --no-ff -m "merge with no-ff" dev 
//强制禁用Fast forward模式

$ git push origin // 将本地分支推送到远程
6.解决冲突

假设master分支要合并dev分支,但发生冲突。这时候Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,如:

Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> dev

手动修改冲突后,在master分支上上传,之后再进行merge。
可以使用带参数的git log 来看分支情况。

$ git log --graph --pretty=oneline --abbrev-commit
7. Bug分支

假设接到一个bug或其他任务,但当前工作还未做完,可以先将当前修改储存,等修完bug,再释放出来。

$ git stash //执行完后,git status工作区就是干净的。
$ git stash list //查看存储了那些stash
$ git stash pop //释放并删除stash

如果只想复制某次commit,而不想merge整个项目。

$ git cherry-pick   //将某次commit复制到当前分支
8.标签
$ git tag   //给当前分支打一个标签
$ git show  //查看该标签的信息
$ git tag -a  -m "xxxxxx" 1094adb 
//给某次commit创建带有说明的标签,
//-a创建标签,-m添加说明
$ git tag -d  //删除标签
$ git push origin  //将某个标签推送到远程
$ git push origin :refs/tags///可以删除一个远程标签。

标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。

9. 忽略某些文件

在仓库目录下新建一个名为.gitignore的文件,并推送到远程,则该仓库的开发者共享一套忽略规则。
注意:一定要在push文件之前创建好.gitignore文件,不然一些文件已经上传了,git就无法忽略了。

'#' 以'#'开始的行,被视为注释.      
 
# 忽略掉所有文件名是 foo.txt的文件.
foo.txt
# 忽略所有生成的 html文件,
*.html
# foo.html是手工维护的,所以例外.
!foo.html
# 忽略所有.o和 .a文件.
*.[oa]

配置语法:
以斜杠“/”开头表示目录;
以星号“*”通配多个字符;
以问号“?”通配单个字符
以方括号“[]”包含单个字符的匹配列表;
以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;

有时候想添加某些文件发现添加不了,可能是被忽略了。可以强制添加或者去检验.gitignore的规则

$ git add -f App.class
$ git check-ignore -v App.class
.gitignore:3:*.class    App.class  #表示第三行规则忽略了.class文件

你可能感兴趣的:(git命令详解)