Git
May 10, 2020
【笔记】Git
个人开发基本工作流
单分支工作
创建版本库
$ git init
配置用户名及邮箱
$ git config --global user.name "Your Name" # --global参数表示对本机所有仓库生效
$ git config --global user.email "Your Email"
添加远程仓库
$ git remote add origin git@github.com:username/program.git
$ git remote set-url origin git@github.com:username/program.git # 修改源
从远程仓库克隆
$ git clone git@github.com:username/program.git
添加到本地stage
$ git add test.txt # 添加指定文件
$ git add . # 添加当前目录下所有修改文件
提交到本地仓库
$ git commit -m "description about this commit"
向远程仓库提交
$ git push origin local:remote # 其中remote可省略
$ git push origin :remote # 删除远程分支
$ git push origin HEAD # HEAD: current branch
多分支工作
新建分支并切换到新分支
$ git branch dev
$ git checkout dev
or
$ git branch -b dev
删除分支
$ git branch -d dev # 删除无新提交分支
$ git branch -D dev # 删除未 merge 分支
查看分支
$ git branch # 查看本地分支
$ git branch -a # 查看本地+远程分支
$ git remote # 查看远程分支
$ git remote -v # 查看远程分支具体信息
开发分支修改合并到主分支
$ git checkout master # 切换到主分支
$ git merge dev # 合并 dev 分支修改到 master 分支,merge 形式
$ git rebase dev # 合并 dev 分支修改到 master 分支,rebase 形式
版本回退
丢弃工作区修改
$ git checkout -- filename
$ git clean -f # remove untracked files. -f force
暂存区回退到工作区
$ git reset HEAD filename # 指定文件从暂存区回退到工作区
版本回退
$ git reset --hard HEAD^ # 回退到上次 commit 版本
$ git reset --hard HEAD^ # 回退到上上次 commit 版本
$ git reset --hard asdfasdf # 回退到指定 commit 版本
commit 历史查看
$ git log # 查看 commit 历史,排列顺序由新到旧
$ git reflog # 查看分支所有操作,版本回退后根据版本号可恢复
$ git log --pretty=oneline # 单行显示 commit 历史
$ git log --graph --pretty=oneline --abbrev-commit # 图形显示 commit 历史,单行显示,缩略版本号
标签管理
$ git tag v1.0 # 给当前 commit 打标签 v1.0
$ git tag v1.0 30429e7 # 给指定 commit 打标签 v1.0
$ git tag -a v1.0 -m "description about this tag" # 指定标签说明信息
$ git tag # 查看所有标签
$ git show v1.0 # 查看标签详细信息
$ git tag -d v1.0 # 删除本地标签
$ git tag origin :refs/tags/v1.0 # 删除远程标签
$ git push origin v1.0 # 远程推送指定标签
$ git push origin --tags # 远程推送本地尚未推送的所有标签
Commits 提交记录修改
$ git commit --amend # 修改最新提交记录,比如修改注释信息、添加文件至提交中
$ git revert # 安全的删除历史某条 commit 记录
$ git cherry-pick commit-id # 在目的分支操作,选择性提交源分支 commits
$ git rebase -i HEAD~5 # 修改分支历史记录,~5 操作5条
同步远程库
$ git remote add upstream my-program.git # 添加远程库
$ git fetch upstream # 取回最新远程库
$ git rebase upstream/master # 变基
or
$ git pull origin your_branch --rebase
Reference
洁癖者用 Git:pull –rebase 和 merge –no-ff
遇到的问题
- 向远程仓库提交失败
git pull --rebase git@github.com:username/program.git
github 作为collaborators协作
将owner的仓库克隆到本地,开发,正常提交即可
忽略已提交到版本库中的文件
modify .gitignore // 修改 .gitignore 文件
git rm --cached test.txt // 从缓存中清除文件 test.txt, 文件夹 -r
windows 下拉取的 git repository 在 windows subsystem linux 中执行
git status
中文件显示modified
windows 中关闭
autocrlf
:git config --global core.autocrlf false
wsl 中 关闭
filemode
:git config core.filemode false // --global