【git】 十分推荐这个git在线学习网站,场景+动画,一天玩转git。 网站:learngitbranching.js.org/
在git工程下:
-
查看git树形图
git log –graph -
查看当前branch 和更改的文件
git status
commit
-
添加所有的修改文件至index
git add .
git ls-files # 列出git index包含的文件
git rm xxx # 删除index中的xxx文件
-
取消添加的文件
git reset . 或者 git reset 文件名
-
提交到本地仓库
git commit -m "commit message "
git commit -m 'xxx' # 提交
git commit --amend -m 'xxx' # 合并上一次提交(用于反复修改)
git commit -am 'xxx' # 将add和commit合为一步
-
合并多个commit
git rebase -i
git rebase -i master~4 只操作master分支的最近4次commit
修改关键字说明:pick:保留该commit(缩写:p)
reword:保留该commit,但我需要修改该commit的注释(缩写:r)
edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
squash:将该commit和前一个commit合并(缩写:s)
fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
exec:执行shell命令(缩写:x)
drop:我要丢弃该commit(缩写:d)
a编辑 esc 退出编辑 :wq保存编辑
git commit --amend 将改动合并到上一个commit
-
提交一个空commit
git commit --allow-empty -m "rerun checks"
拉取 Pull
-
拉取当前分支最新代码
git pull
-
拉取最近代码 并将commit节点移到最新
git pull -r
-
拉取指定分支代码
git pull origin [target]:[rebase]举例:git pull origin master:rebase
-
取消本地commit
git reset HEAD~2 回退向前两个版本的commit记录(删除最新的两次commit记录)
git reset --mixed commit_id 取消add和commit操作 不改变代码。
git reset --soft commit_id 取消commit操作 不撤销add,不改变代码。
git reset --soft HEAD~1 回退1个版本
git reset --hard commit_id 去向commit并将代码还原到之前版本
-
撤销远程分支提交记录
git revert 撤销某个提交记录
git push 推送到远程分支
分支
-
更新远程分(有时候别人提了新分支到远程,checkout 不到,需要先fetch一下)
git fetch origin -
查看远程所有分支
git branch -r
-
查看本地仓库所有分支
git branch
-
查看本地和远程所有分支
git branch -a
-
创建分支
git branch -
切换到某分支
git checkout -
创建并切换到新分支
git checkout -b 相当于上两步 -
从远程分支检出并关联
git checkout -b <本地分支名> <origin/远程分支名> -
把当前分支强制指向某提交节点
git branch -f <当前分支名>
例子:git branch -f master 63c7a35慎用
git checkout -fB <当前分支名>
git checkout -fB master 63c7a35 -
把当前分支所有节点平移到另一个分支某个节点
git rebase <要平移的分支节点的commitId> -
查看本地分支与远程分支的版本对比
git branch -vv -
查看本地和远程的所有分支
git branch -a -
删除本地分支
git branch -d -
删除远程分支
git push origin --delete -
当前分支与远程某分支做关联
git branch -u origin/master -
本地新分支 提交到远程分支
git push <远程主机名> <远程分支名> : <本地分支名>
git push origin dev : dev
git push -u origin [branchName]
Merge合并代码
-
把branchA 合并到master里
git checkout master 先切换到master分支
git merge branchA 把branchA合并过来
Cherry-pick
- 有点类似于rebase 可以选中某几个提交记录
例子:其他分支有ABCD4个提交记录,要取D和B两个提交merge到master上(ABCD指的是commitId):
git checkout master 切换到master分支
git cherry-pick D B 将D和Bmerge到mater中
从另一个仓库获取更改
git remote add 添加新的远程仓库
例子: git remote add voyager git://github.com/voyager/rest-client.git
git fetch fetch 到这个分支
git cherry-pick 97fedac 然后就可以cherry-pick了
git --git-dir=/.git format-patch -k -1 --stdout | git am -3 -k
Tag标签
-
给某个分支打标签
git tag
Stash
-
存:git stash 将当前代码的改保存起来 生成一个id
git stash save '我是备注信息' 保存到暂存区并添加备注信息。
-
查: git stash list 查看保存列表
git show stash@{n} 查看某stash 中修改的文件
git stash show -p stash@{3} 中所有的改动(代码)
-
取:git stash pop 将最新的保存记录恢复到工作区 恢复完成后自动drop掉
git stash pop stash@{id} 指定恢复某个记录
git stash apply <stash@{id}> 恢复指定id 恢复完成后依然会在list中保留stash记录
-
删:git stash drop stash@{id} 删除某个stash记录
git stash clear 清除全部stash记录
-
找回丢弃的Commit
1.git reflog 查看所有的HEAD历史
找到想要恢复的commitId
2.git reset --hard commitId
ERROR
- Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists.
解决办法: (ssh-agent -s)"
$ ssh-add
- error: cannot lock ref 'refs/remotes/origin/siwu/master': 'refs/remotes/origin/siwu' exists; cannot create 'refs/remotes/origin/siwu/master'From ssh://linkedin.ghe.com/multiproduct/karpos-android
解决办法: git fetch --all --prune
或者git remote prune origin
【ADB 命令】
-
查看所有设备
adb devices
-
指定某台设备执行shell
adb -s b7b86f9 shell
-
当前页面Fragment
adb shell "dumpsys activity top | grep '#[0-9]: ' | tail -n 1"
-
栈顶Activity
adb shell dumpsys activity activities | grep mResumedActivity
adb shell dumpsys activity top | grep ACTIVITY