study

View project on GitHub

log 相关 :

git  log -n 5   

git log --author=""

git log --grep="54733094l"

git log --oneline 

git log --stat 
显示改了哪些文件
git log -p
显示改的那些代码

checkout:

git checkout -- a.py 缓存区 -> 工作区 

git checkout a1e8fb5 
    会切换到指定版本,如果不是Head,会自动新拉一个分支
    同时会丢失缓存区

git checkout a1e8fb5 a.py
    不会切分支
    缓存区和工作区没commit的都丢失
    指定文件切到 之前分支,并add到缓存区

git checkout head a.py
    丢弃没commit的所有内容

revert

git revert <commit>
这个可以回退这个版本,如果这个文件之后又被改过,就会和改动进行merge

reset

git reset <commit>
不会改变工作目录,缓存区和项目历史还原到 commit

git reset --hard <commit>
重设工作目录,缓存区,和项目历史

git reset --soft <commit>
不会改工作目录,把历史还原,缓存自动提交撤销的保存

重点是,确保你只对本地的修改使用git reset——而不是公共更改。如果你需要修复一个公共提交,git revert命令正是被设计来做这个的。

clean

新的文件
未被跟踪的文件,reset --hard的时候不会生效。这个两个命令相结合,你就可以将工作目录回到之前特定提交时的状态。

git clean -f <path>
某个目录删除文件

git clean -n 
git告诉你哪些会删除,而不是真的删除

git clean -df
某个目录删除文件 和文件夹

git clean -xf
移除当前目录下未跟踪的文件,以及Git一般忽略的文件。

commit amend

git commit --amend --no-edit
把上次的和缓存区里的一起提交,不改提交信息

rebase

merge master之前

先git rebase -i <base>

冲突的时候 git add -u,就不会提交其他的文件

pull & fetch

fetch 是不会自动merge,而新生成一个分支

pull 自动merge

git pull --rebase <remote> 
这是使用git rebase合并远程分支和本地分支,而不是使用git merge。

git config --global branch.autosetuprebase always
所有的pull都是rebase了