[关闭]
@ds17 2017-10-29T12:03:39.000000Z 字数 3440 阅读 984

Git学习笔记

Git


基本操作

初始化

  1. git init #进入一个目录,初始化为git仓库
  2. git status #查看状态
  3. git add #新增/修改文件后,添加至暂存区(Stage)
  4. git diff #对比缓存与仓库文件的区别
  5. git commit -m "message" #提交到仓库

版本穿梭

  1. git log #查看提交日志
  2. git log --pretty=oneline #每行显示一个提交日志
  3. git reset --hard HEAD~ #回退到上一个版本
  4. git reset --hard HEAD~~ #回退到上上个版本
  5. git reset --hard HEAD~100 #回退到上100个版本
  6. git reflog #查看每一次的命令信息
  7. ea34578 HEAD@{0}: reset: moving to HEAD^
  8. 3628164 HEAD@{1}: commit: append GPL
  9. ea34578 HEAD@{2}: commit: add distributed
  10. cb926e7 HEAD@{3}: commit (initial): wrote a readme file
  11. git reset --hard 3628164c #返回指定是ommit_id 版本

撤销修改

  1. git checkout -- filename
  2. #将最近一个版本checkout到本地
  3. #如果修改前的file已经add到暂存区,但未commit,checkout撤销修改就回到添加到暂存区后的状态
  4. #如果修改前的flie已经commit,checkout撤销修改就回到和版本库一模一样的状态
  5. git reset HEAD readme.txt #把暂存区的修改撤销掉(unstage)

HEAD: 版本库中的最新版本

删除文件

  1. #本地删除文件后,删除仓库中文件
  2. git rm filename
  3. git commit -m "remove filename"

远程仓库

生成SSH KEY

  1. ssh-keygen -t rsa -C "youremail@example.com"

生成KEY路径:C:\Users\SP52479.ssh
两个文件:id_rsaid_rsa.pubid_rsa.pub为公钥,添加到github账户。

远程库关联

将本地库关联到远程库

  1. git remote add origin git@github.com:ds17/git_ex.git #通过SSH关联
  2. git remote add origin https://github.com/ds17/git_ex.git #通过https关联
  3. git remote rm origin #删除origin
  4. git push -f origin master #强制推送到远程
  5. git push origin master #普通推送

远程库clone到本地

  1. git clone https://github.com/ds17/git_ex

分支管理

创建与合并分支

  1. git branch #查看分支,带*的为当前分支
  2. git branch dev #创建分支dev
  3. git checkou dev #move current head to dev
  4. git checkout -b dev #创建dev分支并切换
  5. git add filename
  6. git commit -m "message" #dev分支工作完
  7. git checkout master
  8. git merge dev #合并指定分支到当前分支
  9. git branch -d dev
  10. git push origin dev #推送到GitHub dev分支
  11. git push orogin :dev #删除分支dev
  12. git log --graph --pretty=oneline --abbrev-commit #图形化查看修改日志

合并分支 no ff

  1. git checkout master
  2. 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

  1. git add test.txt
  2. git stash
  3. git checkout master
  4. git checkout -b issue-101
  5. git add filename
  6. git commit -m "message"
  7. git checkout master
  8. git merge --no-ff -m "message" issue-101
  9. git checkout dev
  10. git stash list
  11. git stash apply stash{0}
  12. git stash drop stash{0}
  13. git stash pop stash{0} #返回工作现场,并删除stash内容

Feature分支

当前在dev分支上,并且工作区clean

  1. git branch -D feature-vulcan #强制删除未合并的分支

多人协作

远程库中有masterdev
clone完之后只显示master分支
即使git branch也只显示master分支

  1. git remote -v
  2. git checkout -b dev origin/dev #在本地创建一个dev分支并指向origin/dev

clone后直接创建dev并修改,将导致冲突

  1. git clone https://...
  2. git checkout -b dev #查看远程库信息
  3. ...
  4. git add test.txt
  5. git commit -m "message"
  6. git push origin dev #推送失败,原因是远程库被修改过,需要先pull
  7. git pull
  8. #pull失败:There is no tracking information for the current branch.
  9. #需要先将本地dev链接到远程dev
  10. git --set-upstream dev origin/dev
  11. git pull #文件修改冲突,修复冲突并`commit`, ok
  12. git push origin dev

标签管理

  1. git tag v1.0
  2. git tag v1.1 commit_id
  3. git show tag_name
  4. git tag -a tag_name -m "tag_message" commit_id
  5. git tag -d tag_name #删除tag
  6. git push origin tag_name #push tag 到远程
  7. git push origin --tags #一次性push所有tags
  8. #删除远程tag
  9. git tag -d tag_name #先删除本地tag
  10. git push origin :refs/tags/tag_name #push到远程

Git配置

.gitignore

新建txt文件,sublime打开,save as,文件类型选择All Files(.): .gitignore

.gitignore语法

  1. folder_name/ #ignore the whole folder
  2. *.db #ignore file type: db
  3. filename #ignore the filename,本项目下路径的该名字文件均被ignore

命令行别名

alias

  1. git config --global alias.st status
  2. git config --global alias.co checkout
  3. git config --global alias.ck checkout #ck,co都指向 checkout
  4. git config --global alias.cm commit
  5. git config --global alias.br branch
  6. git config --global alias.untage 'reset HEAD'
  7. git config --global alias.lg 'log --prretty=oneline --abbrev-commit'
  8. git config --global alias.lgg 'log --graph --pretty=oneline --abbrev-commit'

C盘用户目录下隐藏文件:config

  1. [alias]
  2. st = status
  3. ck = checkout
  4. cm = commit
  5. co = checkout
  6. br = branch
  7. unstage = reset HEAD
  8. last = log -1
  9. lg = log --pretty=oneline --abbrev-commit
  10. lgg = log --graph --pretty=oneline --abbrev-commit

附件资料
搭建Git服务器
Git Cheat Sheet

参考资料

  1. Git教程-廖雪峰
  2. .gitignore语法
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注