git实用总结

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就不会生成新的commit
  • git 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 list
  • stash show [name],查看某个stash
  • stash 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这个三个命令是等价的

不同:

  • 语法不同
// 这两者是等价的
git stash save "mytemp"
git stash push -m "mytemp"
  • push和单独暂存某个文件
// 只暂存subDir.txt一个文件
git stash push subDir/subDir.txt
git stash save subDir/subDir.txt(不会生效)

git一些命令

分支->主干

git checkout master  //切换分支
git pull (--rebase) //拉取代码,根据需要选择rebase或merge的冲突处理
git merge shaoc //合并,用merge
git rebase shaoc //合并,用rebase
git commit and push //提交

主干合并到分支

$ git checkout b1
$ git pull (--rebae) //更新到最新
$ git merge (--no-ff) origin/master // merge合并,--no-ff强制生成一个commit记录,不论是否有冲突
$ git rebase origin/master // rebase合并,线性历史,但一个个处理冲突
$ git rebase --continue
$ git rebase --abort

删除操作

git branch -d Chapater8 //删除本地分支
git push origin --delete shaoc //删除远程分支1
git branch -r -d origin/cat //删除远程分支2
git rm --cached readme1.txt //删除readme1.txt的跟踪,并保留在本地。
git rm --f readme1.txt //删除readme1.txt的跟踪,并且删除本地文件。

fork合并操作步骤

//fork 情况下合并到本地分支
//此时origin,为你自己的地址
git remote add upstream URL
git fetch upstream 拉去原作者的仓库更新
git checkout master 切换到自己的master
git merge upstream/master
git rebase upstream/master
merge或者rebase到你的master

git reflog

git reflog //查看历史
git reset --hard hashid //跳转到某个id
git reset --hard HEAD^ //跳转到前一个
git show HEAD@{2} //查看某个记录

强制拉取到最新

//强制拉取到最新
git fetch --all //拉取所有remote
git git reset --hard origin/master // 移动到origin/master
(参考)
git fetch //查看
git checkout . // 情况本地所有工作区
git stash //收藏本地所有内容

git stash

// 收藏文件或修改
git stash
git stash save 'message' //保存时打标记
git stash list
git stash show stash@{0}
git stash pop|apply
git stash pop stash@{0} //应用任意暂存到当前
git diff file //查看文件修改
git stash drop stash@{1}

git branch

git push origin dev  //本地dev分支,push到远程dev分支,不存在则创建
git push origin dev:dev2 // 本地devpush到远程dev2
git checkout -b branch1 origin/branch1 //从远程分支创建本地新分支并检出

git branch //列出本地分支
git branch -r //查看远程分支
git branch -a //所有分支:本地 and 远程
git branch dev //创建本地dev分支
git branch -d dev //删除本地dev分支
git branch -r -d origin/dev //删除远程分支
git branch -vv //查看本地分支对应的远程分支
git branch -m oname newname //分支重命名

git checkout

checkout的作用
// 操作文件
git checkout filename //放弃单个文件修改
git checkout . 放弃当前目录下的修改
// 操作分支
git checkout master 切换分支
git checkout -b branch1 //分支存在则只切换分支;不存在创建并切换到branch1

git log
git log -p -2 //-p 选项展开显示每次提交的内容差异

简单步骤

git stash
git checkout .
git pull
git stash pop
->处理冲突
npm run lint
->处理规范
npm run commit

alias

git 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