🐷 Git Guide

gitguide

Readings

文件的四种状态

  1. committed : 执行git commit之后文件的状态
  2. modified : 修改了一个非untracked的文件之后的状态
  3. staged : 执行 git add 操作之后文件的状态
  4. untracked : 一般是新增的文件

改变remote

# 使用 http
git remote set-url origin https://git.oschina.net/youmoo/ibookstar-advertisement.git

# 使用 ssh
git remote set-url origin git@github.com:USERNAME/OTHERREPOSITORY.git

# 清理本地缓存的remotes(保持和远程一致)
git remote prune origin

Undo last n commit

这里有详细的说明: https://github.com/blog/2019-how-to-undo-almost-anything-with-git

# 把 n 改为你提交的次数即可
git reset --soft HEAD~1

# 把 soft 改为 hard,将把未提交的改变删除

将本地仓库保持为和远程仓库一致

注意: --hard会丢失本地工作,使用时小心。相反地,建议使用--soft

# 方式一, 注意需要将这里的master修改为你所在分支名
git fetch origin
git reset --hard origin/master

# 方式二
git reset --hard @{upstream}
[git pull]

# 额外地,reset后,移除untracked files和directories
git clean -d -f

cherry-pick

用于将A分支的某次提交合并到另一个B分支

git checkout A
git cherry-pick -x [commit-hash]

添加子模块

# 添加子模块仓库
git submodule add ...

# 更新子模块
git submodule foreach ‘git checkout master && git pull origin master’
git submodule foreach git pull

git submodule init
git submodule update

查看上次提交修改了哪些文件

# 修改的文件及内容
git show <commit-id>

# 修改的文件
git show --stat

# 查看更多的提交内容
git log -p

添加全局 .gitignore

cd ~
touch .gitignore_global
git config --global core.exludesfile ~/.gitignore_global

.gitignore_global 的内容

.idea
.DS_Store
target
*.log
*.iml

git 四步曲

git clone url
git add filename
git commit filename -m msg
git push origin [master]

常用命令

git init :初始化
git add filename :添加文件到本地库
git commit -m filename:提交文件到本地库
git push orign master:提交改变到线上

git branch : 显示本地已检出过的分支
git branch --all : 显示所有分支
git remote add origin : 添加git库

git config --global core.editor "vim"
git config --global log.date local # 日期格式

git diff [master] origin/master : 比较本地文件和原始主分支上的文件
git log : 显示本地已经commit但还未push的日志记录

git checkout filename : revert之前的修改或删除操作
git reset HEAD filename : unadd,即,恢复到add操作之前
git reset --hard HEAD : discard all changes from after last commit
git revert md5 : un-commit

分支操作


# 通常是先删除本地分支,再用push删除远程分支
# 删除本地分支
git branch -d local-branch

# 强制删除本地分支
git branch -D local-branch


# 删除remote分支
git push origin :branch-name
git push origin --delete branch-name

# 让本地分支追踪另一个origin分支
# 方式1
git branch --set-upstream-to origin/another-branch

# 方式2
git branch -u origin/another-branch

git remove without delete file

git rm --cached file.txt   // remove single file
rm rm --cached file1.txt file2.txt // remove multiple files
git rm -r --cached folder // remove an entire folder 

git stash

用于把当前改变封存起来,进行其它编辑操作

# 封存当前状态
git stash

# 封存当前状态,给一个方便的名字
git stash save 'xxx'

# 恢复stash@{0}
git stash apply

# 恢复给定的封存点,n是封存点
git stash apply stash@{n}

# 恢复给定的封存点,并将其从封存点中删除
git stash pop stash@{n}

# 查看所有封存点
git stash list

# 清除封存点
# git stash clear

# 查看封存的内容
# 查看最近一次封存的内容
git stash show -p
# 查看给定封存点暂存的内容
git stash show stash@{1}

git rebase -i

用于合并提交(仅限于未push到远程分支的提交)

# 合并最近2次的提交
git rebase -i HEAD~2

# 貌似也可以用,后面试试
git reset --soft HEAD~2 && git commit

搜索提交信息

git log -i --grep='ckeditor'

orphan,一般用于gh-pages

# 创建orphan分支
git checkout --orphan newbranch

# 清空分支下的文件
git rm -rf .

<do work>

# 添加新文件
git add your files

# 提交新文件
git commit -m 'Initial commit'
Edit