基本操作
初始化
git init #进入一个目录,初始化为git仓库
git status #查看状态
git add #新增/修改文件后,添加至暂存区(Stage)
git diff #对比缓存与仓库文件的区别
git commit -m "message" #提交到仓库
版本穿梭
git log #查看提交日志
git log --pretty=oneline #每行显示一个提交日志
git reset --hard HEAD~ #回退到上一个版本
git reset --hard HEAD~~ #回退到上上个版本
git reset --hard HEAD~100 #回退到上100个版本
git reflog #查看每一次的命令信息
ea34578 HEAD@{0}: reset: moving to HEAD^
3628164 HEAD@{1}: commit: append GPL
ea34578 HEAD@{2}: commit: add distributed
cb926e7 HEAD@{3}: commit (initial): wrote a readme file
git reset --hard 3628164c #返回指定是ommit_id 版本
撤销修改
git checkout -- filename
#将最近一个版本checkout到本地
#如果修改前的file已经add到暂存区,但未commit,checkout撤销修改就回到添加到暂存区后的状态
#如果修改前的flie已经commit,checkout撤销修改就回到和版本库一模一样的状态
git reset HEAD readme.txt #把暂存区的修改撤销掉(unstage)
删除文件
#本地删除文件后,删除仓库中文件
git rm filename #文件名大小写敏感
git commit -m "remove filename"
git rm -r #移除整个文件夹
远程仓库
生成SSH KEY
ssh-keygen -t rsa -C "youremail@example.com"
生成KEY路径:C:\Users\SP52479.ssh
两个文件:id_rsa
和id_rsa.pub
,id_rsa.pub
为公钥,添加到github账户。
远程库关联
将本地库关联到远程库
git remote add origin git@github.com:ds17/git_ex.git #通过SSH关联
git remote add origin https://github.com/ds17/git_ex.git #通过https关联
git remote rm origin #删除origin
git push -f origin master #强制推送到远程
git push origin master #普通推送
远程库clone
到本地
git clone https://github.com/ds17/git_ex
分支管理
创建与合并分支
git branch #查看分支,带*的为当前分支
git branch dev #创建分支dev
git checkou dev #move current head to dev
git checkout -b dev #创建dev分支并切换
git add filename
git commit -m "message" #dev分支工作完
git checkout master
git merge dev #合并指定分支到当前分支
git branch -d dev
git push origin dev #推送到GitHub dev分支
git push orogin :dev #删除分支dev
git log --graph --pretty=oneline --abbrev-commit #图形化查看修改日志
合并分支 no ff
git checkout master
git merge --no-ff -m "commit with no ff" dev #以commit方式merge
BUG分支
临时需要修复BUG
1. stash
dev
分支的未commit
内容(stash
前先add
);
2. 返回master
分支;
3. 创建issue-bug
分支进行bug
修复;
4. 修复完,返回master
分支,并以--no-ff
形式merge
5. 返回dev
分支,查看stash list
, pop
需要的stash
git add test.txt
git stash
git checkout master
git checkout -b issue-101
git add filename
git commit -m "message"
git checkout master
git merge --no-ff -m "message" issue-101
git checkout dev
git stash list
git stash apply stash{0}
git stash drop stash{0}
git stash pop stash{0} #返回工作现场,并删除stash内容
Feature分支
当前在dev
分支上,并且工作区clean
git branch -D feature-vulcan #强制删除未合并的分支
多人协作
远程库中有master
及dev
clone
完之后只显示master
分支
即使git branch也只显示master分支
git remote -v
git checkout -b dev origin/dev #在本地创建一个dev分支并指向origin/dev
clone
后直接创建dev
并修改,将导致冲突
git clone https://...
git checkout -b dev #查看远程库信息
...
git add test.txt
git commit -m "message"
git push origin dev #推送失败,原因是远程库被修改过,需要先pull
git pull
#pull失败:There is no tracking information for the current branch.
#需要先将本地dev链接到远程dev
git --set-upstream dev origin/dev
git pull #文件修改冲突,修复冲突并`commit`, ok
git push origin dev
标签管理
git tag v1.0
git tag v1.1 commit_id
git show tag_name
git tag -a tag_name -m "tag_message" commit_id
git tag -d tag_name #删除tag
git push origin tag_name #push tag 到远程
git push origin --tags #一次性push所有tags
#删除远程tag
git tag -d tag_name #先删除本地tag
git push origin :refs/tags/tag_name #push到远程
Git配置
.gitignore
新建txt文件,sublime打开,save as,文件类型选择All Files(.): .gitignore
.gitignore语法
folder_name/ #ignore the whole folder
*.db #ignore file type: db
filename #ignore the filename,本项目下路径的该名字文件均被ignore
命令行别名
alias
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ck checkout #ck,co都指向 checkout
git config --global alias.cm commit
git config --global alias.br branch
git config --global alias.untage 'reset HEAD'
git config --global alias.lg 'log --prretty=oneline --abbrev-commit'
git config --global alias.lgg 'log --graph --pretty=oneline --abbrev-commit'
C盘用户目录下隐藏文件:config
[alias]
st = status
ck = checkout
cm = commit
co = checkout
br = branch
unstage = reset HEAD
last = log -1
lg = log --pretty=oneline --abbrev-commit
lgg = log --graph --pretty=oneline --abbrev-commit
GIt 大小写敏感
git config core.ignorecase false
git config core.ignorecase true
附件资料
搭建Git服务器
Git Cheat Sheet