记录一些常用的Git命令

210 阅读4分钟

【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

  1. Permission denied (publickey).
    fatal: Could not read from remote repository.
    Please make sure you have the correct access rights and the repository exists.

       解决办法: eval" eval "(ssh-agent -s)"
$ ssh-add

  1. 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