alias clean_merged='git checkout master && git branch --merged | grep -v master | xargs git branch -D'
Category: Git
-
clean_merged 清理已经合并的 git 分支
-
git 分支重命名 rename branch
本地 branch 重命名 foo => bar
1. 本地重命名,切到分支 foo
git branch -m bar
或者直接重命名
git branch -m foo bar
2. 如果分支已经在远端,查看远端 origin
git remote show origin Remote branches: foo tracked master tracked Local branch configured for 'git pull': master merges with remote master Local refs configured for 'git push': foo pushes to foo (up to date) master pushes to master (up to date)这就需要把本地分支 bar push 上去,把 foo 分支删掉
git push origin :foo bar - [deleted] foo * [new branch] bar -> bar
最后在本地的 bar 分支下把 upstream 设置好
git push origin -u bar Branch bar set up to track remote branch bar from origin.
查看远端 origin
git remote show origin Remote branches: bar tracked master tracked Local branches configured for 'git pull': bar merges with remote bar master merges with remote master Local refs configured for 'git push': bar pushes to bar (up to date) master pushes to master (up to date)删除远端分支
git push origin :feature/upgrade-gke master * ] 12:02 PM To github.com:xxx/yyy.git - [deleted] feature/upgrade-gke
-
git stash
保存当前工作
git stash
查看 stash 列表
git stash list
切回某次工作
git stash apply stash@{3}切回最近一次保存的工作
git stash pop 相当于 git stash apply stash@{0}删除某个 stash
git stash drop stash@{1} -
git diff 换行
git --no-pager diff
or
git diff --color | less -R
显示改动过的文件
git diff --staged --name-only | cat
比较 feature 分支和 master 分支具体一个文件的变动
git diff feature/sftp-server master -- .gitlab-ci.yml
https://stackoverflow.com/questions/4099742/how-to-compare-files-from-two-different-branches
-
git notes
level 6
rebase
git fetch只获取,并不合并
本地与远端使用git rebase
git rebase进行了三步操作把所有master的改变放到一个临时区域里面
运行所有origin/master的提交
运行在临时区域的commits
本地两个分支间的rebase,master和 develop均有提交
在develop分支下,
git rebase master
然后再git checkout master
把develp合并过来
git merge develop
conflicts本地master和远端origin/master都修改了同一个文件,并在本地提交
解决冲突
在master上git fetch
然后git rebase,这样保证在master上有最新的代码
这里会提示有冲突
当解决了问题,则用git rebase –continue
level 7
git log
sha hashgit config –global color.ui true
git log –pretty=oneline
git log –oneline –stat
当前分支与 master 的区别
git log --oneline ...master
git log -p 查看具体的改变
git diff == git diff HEAD
git diff HEAD^git diff HEAD~5
git diff HEAD^..HEADgit diff sha..sha
git diff master develop对于单个文件一直以来的变化
git blame index.html –date short
git status 看到有不想提交的,则在 .git/info/exclude 把文件过滤掉.gitignore
git 删除文件
git rm README.txt
在 system 中不会被删除,但在 git 中会删除
git rm –cached development.logmac 指定 merge 工具
git config --global merge.tool opendiff git config --global alias.st status 来设置 status 的别名
level 4
git push rejected
首先git pull
pull的动做细分
git fetch到origin/master
将origin/master合并到本地 master
git merge origin/master
现在再push
conflict
必须手动解决
level 1
查看staged文件做了哪些改动
git diff –staged
在提交的同时进行添加
git commit -a -m “add index”
将修改的文件恢复
git checkout — cats.html index.html
level 2undo上一次提交,并将改变放到 staging 中
git reset --soft HEAD^
只修改上一次的提交
git commit --amend -m "New Message"
undo 上一次的提交和修改,你的修改会丢失
git reset --hard HEAD^
undo 上两次的提交和修改
git reset --hard HEAD^^
git reset HEAD ostrich.html
查看远端的 fetch 及 push地址
git remote -vgit remote add <name> <address>
删除远端 repo
git remote rm <name>git push -u origin master
origin是远端 repo 的名字, master 是本地分支的名字
设置 git config user
git config --global --edit #全局配置在 ~/.gitconfig [user] name = myusername email = [email protected] 当前项目配置在 .git/config想要保存一个空目录时,一般添加一个空文件.gitkeep,比如
secrets/.gitkeep
macOS 自动保存到 keychain
git config --global credential.helper osxkeychain