git小记
- https://githowto.com/aliases
git rebase -i HEAD~4
用来合并最近4次的提交git log origin/master
查看的是本地版本库的origin/master分支,如果要看远程,需要先git fetch
从远程取下来再git ls orign/master
工作区
暂存区
本地版本库
远程版本库
git rebase branchname
是变基合并,它不会产生新的merge记录,会把之前的提交记录依次放在本分支;- 尽量不要在master分支
git rebase branch
操作 git commit --amend
用于修改上一次commit信息git reflog
用于查看git操作日志,可以方便的用git reset --hard hashid
回滚,或git reset --hard HEAD^
到上一个版本git push origin dev:dev
是推送分支到远程的命令;dev和dev存在追踪关系时,git push origin dev
;当前分支且存在追踪关系,git push origin
;只有一个远程分支,且当前分支存在远程追踪关系git push
git pull <远程主机名> <远程分支名>:<本地分支名>
同push,git pull
git pull origin shaoc
都是简写git merge --no-ff shaoc
不使用fast-forward,肯定会生成一个合并历史,方便查看历史。git merge
如果不存在冲突的时候,默认会使用fast-forward就不会生成新的commitgit pull --rebase
,fetch后,合并时使用rebase方式,等于git fetch + git merge
;git pull
=git fetch + git rebase
git stash
功能是把所有没有提交的修改暂存到stash里面。可用git stash pop
恢复,git stash drop
用于删除。stash save message
推荐使用,等价于stash push -m "message"
;如果要暂存部分,stash push log/file -m "sth"
git checkout -b b1 origin/master
表示从origin/master
创建并切换分支b1
场景1:多人开发当前dev分支,拉取代码可以使用git pull --rebase
,避免生成多余记录;但是如果冲突太多,一个个合并就太麻烦了,需要使用git pull
场景2:分支feature正在开发,最好及时拉取master的最新代码合并,可以使用git merge --no-ff origin/master
,强制记一条记录;如果冲突不多,使用git rebase origin/master
,把master的提交记录都平移过来
场景3:分支阶段开发完成,需要合会主分支,请使用git merge --no-ff branch
,这样不管有没有冲突都会记录一条commit信息;如果预计没有冲突,且想把分支的提交记录平移过来,而不是只记录一条提交日志,请使用git rebase branch
,不推荐这样,是因为会导致主分支的commit历史记录收到影响。
合并是很常见的操作,那么到底什么时间改用什么命令呢
?两者的使用需要,具体看冲突commit次数的多少,是否想要平移commit记录,是否需要记录一次merge历史,根据需求自行选择;
stash
git stash
暂存git stash save 'shaoc'
推荐加一个message,等价于git stash push -m "message"
stash list
查看stash drop [name]
,默认移除最近一个stash clear
, 清空stash liststash show [name]
,查看某个stashstash pop
stash apply
默认情况下,git stash会缓存下列文件:
- 添加到暂存区的修改(staged changes)
- Git跟踪的但并未添加到暂存区的修改(unstaged changes)
但不会缓存以下文件:
- 在工作目录中新的文件(untracked files)
- 被忽略的文件(ignored files)
git stash命令提供了参数用于缓存上面两种类型的文件。使用-u
或者--include-untracked
可以stash untracked
文件。使用-a或者–all命令可以stash当前目录下的所有修改。
git stash push 和 git stash save
git stash push 目前不被推荐使用了,推荐使用save
功能相同点:
- 用于本地存储修改,并加一个message说明,
git stash
git stash save
git stash push
这个三个命令是等价的
不同:
- 语法不同
// 这两者是等价的 |
push
和单独暂存某个文件
// 只暂存subDir.txt一个文件 |
git一些命令
分支->主干
git checkout master //切换分支 |
主干合并到分支
$ git checkout b1 |
删除操作
git branch -d Chapater8 //删除本地分支 |
fork合并操作步骤
//fork 情况下合并到本地分支 |
git reflog
git reflog //查看历史 |
强制拉取到最新
//强制拉取到最新 |
git stash
// 收藏文件或修改 |
git branch
git push origin dev //本地dev分支,push到远程dev分支,不存在则创建 |
git checkout
checkout的作用 |
简单步骤
git stash |
aliasgit config --global alias.ls "log --color --graph --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Cblue %s %Cgreen(%cd) %C(bold blue)<%an>%Creset' --abbrev-commit"
git config --global alias.lss "log --color --stat --graph --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Cblue %s %Cgreen(%cd) %C(bold blue)<%an>%Creset' --abbrev-commit"
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
--author='shaoc'
--no-merges
used:
git ls
git ls origin/master
git ls --no-merges origin/master