首页 > 代码库 > git学习笔记
git学习笔记
参考了http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
创建SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com" #win7需要使用git-bash
git全局配置
git config --global user.name "xyd"
git config --global user.email "xyd@email.com"
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别名配置
克隆远程仓库
git clone git@github.com:username/project-name.git
初始化git仓库
git init [project-name]
git init --bare [project-name] #创建裸仓库,没有工作空间,适用于git服务器上的仓库
添加到暂存区、提交到本地仓库、查看状态
git add filename
git commit -m "message for commit"
git status
git rm filename #删除暂存区文件
提交记录查看
git log
git log --oneline #一行显示提交日志信息,commit id部分显示
git log --pretty=oneline #一行显示提交日志信息,commit id完整显示
git log --graph --oneline --decorate #graph显示提交线,decorate显示commit id的提交分支
比对
git diff filename / git diff -- filename / git diff HEAD -- filename #这三个cmd都是与HEAD比对
git diff commit-id -- filename #与指定的commit-id比对
分支操作
git branch 查看分支
git branch <name> 创建分支
git checkout <name> 切换分支
git checkout -b <name> 创建+切换分支
git branch -d <name> 删除分支
git branch -D <name> 强行删除,丢弃一个没有被合并过的分支
git merge <name> 合并某分支到当前分支
git merge --no-ff -m "merge with no-ff" <name> #--no-ff参数,禁用Fast forward快进方式合并,
#快进方式删除分支后会丢失分支信息
分支合并示例
git branch查看所有分支与当前所属分支
git checkout master切换到master分支
git merge dev合并dev分支到当前分支
git push origin master远程master分支提交
版本回退
场景1:当你改乱了作区某个件的内容,想直接丢弃工作区的修改时,命令git checkout -- filename
场景2:当你不但改乱了作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步:
第?步:?命令git reset HEAD file,就回到了场景1;
第?步:按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,不过前提是没有推送到远程库
git reset --hard commit_id 回退到指定的commit-id版本,commit-id可通过git reflog查看命令历史
git reset --hard HEAD^回到前一版本(git reset --hard HEAD回到当前仓库版本)
场景4:已经提交了不合适的修改到版本库时并推送了远程库,想要撤销本次提交
1. git本地版本回退
git reset --hard commit_id (commit_id可用 git log --oneline 查看)
2. git远程版本回退
git push origin HEAD --force #远程提交回退
远程分支关联、抓取、推送
git remote/git remote -v 查看远程库信息
git remote add origin git@github.com:username/project-name.git要关联?个远程库
git push -u origin master第?次推送master分?的所有内容;
此后,每次本地提交后,只要有必要,就可以使?命令git push origin master推送最新修改。
git pull --rebase origin master 拉代码(如果远程分支比较重要使用此方法)
git pull = git fetch + git merge
git pull --rebase = git fetch + git rebase
git push origin branch-name #从本地推送分支
git checkout -b branch-name origin/branch-name #在本地创建和远程分支对应的分支
git branch --set-upstream branch-name origin/branch-name #建立本地分支和远程分支的关联
Tag操作
命令git tag <name> [commit-id] #用于新建一个标签,默认为HEAD,也可以指定一个commit id;
git tag -a <tagname> -m "tag info" [commit-id] 可以指定标签信息;
git tag -s <tagname> -m "sign info" [commit-id] 可以用PGP签名标签;
命令git tag可以查看所有标签
命令git push origin <tagname>可以推送一个本地标签;
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d <tagname>可以删除一个本地标签;
命令git push origin :refs/tags/<tagname>可以删除一个远程标签。
git show tagname #查看tag详细信息
.gitignore文件配置
$ git check-ignore -v App.class
.gitignore:3:*.class App.class
Git会告诉我们,.gitignore的第3行规则忽略了该文件,于是我们就可以知道应该修订哪个规则。
忽略某些文件时,需要编写.gitignore;
.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!
.gitignore放在项目的根目录下
git学习笔记