Git 简单操作

纯记录

生成密钥对

$ ssh-keygen -t rsa -C "username@gmail.com"

Git 初始设置

$ git config --list           # 显示当前配置
$ git config --global -e      # 全局 git 配置
$ git config --global user.name "username"            # 全局配置提交者用户名
$ git config --global user.email username@gmail.com   # 全局配置提交者邮箱

建立仓库并初始化

$ cd overlay && git init

项目暂存

$ git add .               # 添加所有文件至暂存
$ git add file            # 添加文件至暂存
$ git add dir             # 添加目录至暂存
$ git rm file             # 删除工作区文件,并将这次删除放入暂存
$ git rm --cached file    # 删除记录中文件
$ git mv old new          # 改名操作,并将这个操作置入暂存

提交修改

$ git commit -m 'commit message'
$ git commit --amend -m "commit other"          # 修正之前的提交注释

上传 origin 到远程的 master 分支

$ git remote add origin git@github.com:iHavee/overlay.git
$ git push origin master

一般性步骤

$ cd overlay
$ git add .
$ git commit -m 'commit'
$ git remote add origin git@github.com:iHavee/overlay.git      #仅第一次指定 remote 地址,以后 push 时可以省略
$ git push origin master

更新文件

$ git pull origin            #更新,chekout 代码
$ git fetch origin           #更新远端 repository 信息
$ git merge origin master    #合并
$ vi README
$ git commit -a
$ git push origin master     #提交

创建分支

$ git branch
$ git branch new-branch
$ git checkout new-branch
$ touch newreadme
$ git add newreadme
$ git commit -a -m 'add newreadme'
$ git push origin new-branch

创建空白分支

$ git checkout --orphan gh-pages
$ git rm -rf .
$ git add .
$ git commit -m 'new branch: gh-pages'
$ git push origin gh-pages

删除远程分支

$ git push origi :new-branch

删除本地分支

$ git branch -d new-feature

有时在两台电脑操作同一个 repo,会出现 GitHub repo 分支已删除,但本地的某台电脑没有删除的情况

$ git branch -d -r remotename/branchname

合并进 master

$ git checkout master
$ git merge new-feature
$ git branch
$ git push

生成压缩包

$ git archive

github 回滚

$ git branch old                               #创建 old 分支
$ git push origin old:old                      #push 到远程 github
$ git reset --hard id                          #本地回滚到某版本,并随后将 github 上默认分支改为 old
$ git push origin :master                      #删除 github 上的 master 分支
$ git push origin master                       #push重新创建的master分支
$ git push origin :old                         #将 github 默认分支改为 master,并删除远程 old 分支
$ git clone git@github.com:Havanna/overlay.git #重新 clone

撤销本地更改

$ git checkout file                             # 检出修改的文件

撤销暂存更改

$git revert HEAD file

撤销提交的版本

$ git revert HEAD                              #撤销前一次commit
$ git revert HEAD^                             #撤销前前一次commit
$ git revert commit id                         #撤销指定的版本

$ git reset --hard id
$ git push origin HEAD --force

如果仅撤销 commit message,则

$ git reset --soft id
$ git commit -m 'xxx'

$ git commit --amend

.gitIgnore 文件忽略哪些不被 Git 跟踪的文件,在根目录下生成 .gitignore 文件

# Can ignore specific files
.DS_Store
# Use wildcards as well
*~
*.swp
# Can also ignore all directories and files in a directory.
tmp/**/*
# Ignore all dotfiles...
.*
# except for .gitignore
!.gitignore

删除悬空对象(dangling objects)

$ git gc --prune=0
$ git reflog expire --expire-unreachable=0 --all

永久删除历史文件

$ git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch /path/file' --prune-empty --tag-name-filter cat -- --all
$ git push origin --force --all
$ git push origin --force --tags
$ rm -rf .git/refs/original/
$ git reflog expire --expire=now --all
$ git gc --prune=now