Git常用命令

1. git 查看log

命令 含义
git log --online 查看线上操作记录

2. git回滚操作

  • cherry pick

git cherry-pick 回滚操作(恢复记录)
git cherry-pick [<options>] <commit-ish> 挑拣提交

命令 含义
--quit 退出当前的chery-pick序列
--continue 继续当前的chery-pick序列
--abort 取消当前的chery-pick序列,恢复当前分支
-n, --no-commit 不自动提交
-e, --edit 编辑提交信息
当使用git cherry-pick发生冲突后,将会出现如下信息:
1
2
3
4
5
6
7
8
9
$ git cherry-pick 23d9422
error: could not apply 23d9422... [Description]:branch2 commit 3
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
error: could not apply 23d9422... [Description]:branch2 commit 3
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'

这时如果要继续cherry-pick,则首先需要解决冲突,通过git add .将文件标记为已解决,然后可以使用git cherry-pick --continue命令,继续进行cherry-pick操作。

  • 如果要中断这次cherry-pick,则使用git cherry-pick --quit,这种情况下当前分支中未冲突的内容状态将为modified,

  • 如果要取消这次cherry-pick,则使用git cherry-pick --abort,这种情况下当前分支恢复到cherry-pick前的状态,没有改变

  • reset

命令 含义
git fetch 拉取最新线上分支情况
git reset --hard 硬切回当前分支提交的某次记录
git reset --hard HASH 返回到某个节点,不保留修改。
git reset --soft HASH 返回到某个节点。保留修改
git reset b 这里恢复你对于b的修改(恢复文件b)
  • revert

假如git commit 链是A -> B -> C -> D, 如果想把B,C,D都给revert,除了一个个revert之外,还可以使用range revert

  • git revert oldCommit^..newerCommit(本例中为git revert B^..D,这样子就把B,C,D都给revert了,变成了A-> B ->C -> D -> D’-> C’ -> B’)
  • git revert -n oldCommit^..newerCommit //三个revert不自动生成三个新的commit,然后可以利用git commit -m "revert oldCommit to newerCommit完成range revert

3. git tag相关操作

命令 含义
git tag 查看tag
git tag test_tag c809ddbf83939a89659e51dc2a5fe183af384233 在某个commit 上打tag
git push origin test_tag 本地tag推送到线上
git tag -d test_tag 本地删除tag
git push origin :refs/tags/test_tag 本地tag删除了,再执行该句,删除线上tag
git tag -a v1.4 -m 'my version 1.4' 创建含附注的tag
git push origin --tags 推送tag至远程
git checkout v1.5.6 检出tag

4. git工作目录stash

  • git stash 保存当前的工作目录
  • git stash 恢复当前的工作目录

5. git checkout相关操作

  • git checkout .本地所有修改的。没有的提交的,都返回到原来的状态
  • git checkout 5ff787cc8 b将文件b检出到本分支(替换当前工作区的b文件)

6. git修改本地和远程分支名

  • 修改本地分支名称
    git branch -m oldName newName
  • 修改远程分支名称
    1
    2
    3
    1. git push --delete origin oldName //删除远程分支
    2. git push origin newName //上传新命名的分支
    3. git branch --set-upstream-to origin/newName //关联本地分支与远程分支

7. git建立远程分支别名

git remote add origin git@XX.XX.XX.12:gyjia/hotcodeserver.git
在本地仓库中建立一个与远程仓库的别名,以便之后提交代码而不是每次都要输入远程仓库地址
把本地的代码提交的远程仓库步骤

  1. 建立本地分支,并切换到该分支
    git branch dev
    git checkout dev
    或者合并指令 git checkout -b dev

  2. push到远程仓库
    git push origin dev

  3. 远程分支合并到本地
    git pull origin dev:master将远程分支master代码合并到本地dev(merge)
    git pull master 将远程仓库的master分支合并下来。如果本地没有master分支,那么本地就新建一个master分支

8. git pull和git rebase区别

  • git pull = git fetch + git merge
  • git pull --rebase = git fetch + git rebase

9. git修改远程分支的commit

  • 修改已提交到远程分支的commit信息
1
2
git commit --amend -m "注释"
git push --force-with-lease origin dev

10. git疑难杂症

  • git config --system --unset credential.helper //解决clone http项目时,总是要求输入用户名和密码的问题
  • git config --global credential.helper store //解决每次push、pull时都要输入用户名密码
  • 解决AndroidStudio terminal中执行git log命令时,出现的乱码问题
1
2
3
4
5
git config --global core.quotepath false
git config --global gui.encoding utf-8
git config --global i18n.commit.encoding utf-8
git config --global i18n.logoutputencoding utf-8
export LESSCHARSET=utf-8

11. git修改分支名称