初始化
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
- fetch只会下载远程更新,但不会更新本地
- 使用diff对比下载的更新与本地的差异
- 将下载的更新与本地合并,origin/master 指代要与哪个branch合并
总结:构成一次完整的从远程下载代码并更新到本地的流程
直接下载远程仓库并同步到本地仓库
git pull origin master
git pull
git diff HEAD\^ HEAD //查看当前版本与上一个版本的区别
- orgin master 为指定为远程仓库(orgin)的master分支
- 如果省略参数,默认为 origin master 总结:pull 相当于是从远程获取最新版本并merge到本地
推送更新到远程仓库
git push origin master //上面命令表示,将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。
git push origin master:<new branch name> //创建新的分支
git push origin --delete <branchName> //删除远程分支
origin
是 remote
名,git remote
可以看看有哪些 remote
,git 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
查看命令历史,以便确定要回到未来的哪个版本。
误操作撤销
- 工作区文件被修改了.
git checkout -- file
命令中的 -- 很重要,没有--,就变成了切换到另一个分支的命令 - 已经通过
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
,如果远程的master
和dev
一样,没关系;
如果不一致,则需要 clone
出 dev
分支 git checkout -b dev origin/dev
之后每个人在本地的dev
分支上独自开发(最好不要在master
上开发),
开发完成之后push到远程dev git push origin dev
。
之后审核人再确定是否合并dev
到master
。