初始化

1.git init				//初始化一个本地仓库
2.git clone xxx.git ["指定目录"]	//clone一个远程的

操作

git branch -a		//查看所有的分支(branch)
git branch -r	//查看远程分支  
git status		//查看需要add或者commit的内容
git add <文件名>	//表明这个修改过的文件已确定,可以提交到branch了
git add .		//确认所有修改过的文件
git commit <文件名>	//将一个文件提交
git commit -a		//投交所有文件
git commit --amend	//修改最后一次commit时候的信息
git push origin master --force	//对于已经push过的commit信息,本地修改后,使用这个命令修改远程的commit信息

日志

git log     查看日志简报
git log --oneline  单行输出
git log --pretty=oneline 以精简模式单行输出显示
git log --graph 以图形模式显示
git log --stat 显示文件更改列表
git log --author= 'name' 显示某个作者的日志
git log -p  查看日志详细内容(内容多时按q退出)
git log -p filepath 查看某个文件的详细修改
git log -L start,end:filepath 查看某个文件某几行范围内的修改记录
git log --stat commitId  或者 git show --stat commitId 查看某一次提交的文件修改列表

远程操作

origin 并无特殊含义
远程仓库名字 origin 与分支名字 master 一样,在 Git 中并没有任何特别的含义一样。
同时 master 是当你运行 git init 时默认的起始分支名字,原因仅仅是它的广泛使用,origin 是当你运行 git clone 时默认的远程仓库名字。
如果你运行 git clone -o booyah,那么你默认的远程分支名字将会是 booyah/master

远程仓库关联起来

git remote add origin ssh: //xxx.git
列如:
git remote add origin git@github.com:michaelliao/learngit.git

//如果远程仓库为空,则
git push -u origin master

加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令

git remote add github git@github.com:xxx/xxx.git //新增加一个远程仓库
git remote set-url origin git@github.com:xxx/xxx.git //修改远程仓库的链接
git remote show origin              //查看远程创建(orgin)的信息

下载远程仓库信息

git fetch <远程主机名> <分支名>     //如,取回origin主机的master分支
git diff origin/master
git merge origin/master
  1. fetch只会下载远程更新,但不会更新本地
  2. 使用diff对比下载的更新与本地的差异
  3. 将下载的更新与本地合并,origin/master 指代要与哪个branch合并
    总结:构成一次完整的从远程下载代码并更新到本地的流程

直接下载远程仓库并同步到本地仓库

git pull origin master
git pull
git diff HEAD\^ HEAD //查看当前版本与上一个版本的区别    
  1. orgin master 为指定为远程仓库(orgin)的master分支
  2. 如果省略参数,默认为 origin master 总结:pull 相当于是从远程获取最新版本并merge到本地

推送更新到远程仓库

git push origin master                    //上面命令表示,将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。
git push origin master:<new branch name>  //创建新的分支
git push origin --delete <branchName>     //删除远程分支

originremote 名,git remote 可以看看有哪些 remotegit remote add 可以添加 remote...
事实上 git push origin master 的意思是 git push origin master:master (将本地的 master 分支推送至远端的 master 分支,如果没有就新建一个)

git push --set-upstream origin master  //手动建立追踪关系,master分支追踪origin/master分支
git branch --set-upstream-to=origin/master

记录

git reflog 用来记录你的每一次命令

HEAD 指向的版本就是当前版本,因此,Git 允许我们在版本的历史之间穿梭,使用命令 git reset --hard commit_id
穿梭前,用 git log 可以查看提交历史,以便确定要回退到哪个版本。 要重返未来,用 git reflog 查看命令历史,以便确定要回到未来的哪个版本。

误操作撤销

  1. 工作区文件被修改了. git checkout -- file 命令中的 -- 很重要,没有--,就变成了切换到另一个分支的命令
  2. 已经通过 git add file 推送到缓存区.
    git reset HEAD file
    Git同样告诉我们,用命令 git reset HEAD file 可以把暂存区的修改撤销掉(unstage),重新放回工作区

分支管理

git checkout -b dev     //创建并切换分支
git branch              //查看分支
git branch <name>       //创建分支
git checkout <name>     //切换分支
git checkout -b <name>  //创建+切换分支
git merge <name>        //合并某分支到当前分支:
git branch -d <name>    //删除分支

可以看到分支的合并情况 git log --graph --pretty=oneline --abbrev-commit

开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。

从指定的commit创建分支

git checkout -b dev aef598fa45 // 从指定的commit创建分支,并切换到新建分支
git branch dev aef598fa45      // 从指定的commit创建分支

多人合作模式

假设远程公共仓库,有一个master和一个dev分支,进行多人协作开发时候(每个人的公钥必须加入到远程账号下,否则无法push
每个人都应该clone一份到本地。
但是clone的只是master,如果远程的masterdev一样,没关系;
如果不一致,则需要 clonedev 分支 git checkout -b dev origin/dev 之后每个人在本地的dev分支上独自开发(最好不要在master上开发),
开发完成之后push到远程dev git push origin dev
之后审核人再确定是否合并devmaster