git 技巧

设置文本编辑器

git config --global core.editor emacs  

配置用户信息

git config --global user.name "Your Name"
git config --global user.email "email@example.com"

版本回退

回退上一个版本

git reset --hard HEAD^

回退到指定版本

git reset --hard 0fa7197c3170f7dbf8c872592a873ab50a4ce094

回退完后,要强制提交,强制提交比较旧的代码

git push origin HEAD:master --force
#or
git push origin 0fa7197c3170f7dbf8c872592a873ab50a4ce094:master --force

git reset 之后的后悔药

git reset 之后再想恢复的话,就要用到git reflog

  1. 通过git reflog查看 reset 前的 commit(比如是:8025dc0)
➜  testgitrepo git:(master) ✗  git reflog
afdd485 (HEAD -> master) HEAD@{0}: reset: moving to HEAD
afdd485 (HEAD -> master) HEAD@{1}: checkout: moving from 8025dc01b0d30ea4cc60c465253e133f1204fd38 to master
8025dc0 (origin/master, origin/HEAD) HEAD@{2}: checkout: moving from master to 8025dc0
afdd485 (HEAD -> master) HEAD@{3}: commit: add set routingKeys scripts
1472037 HEAD@{4}: reset: moving to HEAD^
8025dc0 (origin/master, origin/HEAD) HEAD@{5}: commit: add set routingKeys scripts
1472037 HEAD@{6}: clone: from http://git.abc.cn/config/testgitrepo.git
  1. 执行下面命令
git reset --hard 8025dc0

给已经存在的目录设置成git库

cd existing_folder
git init
git remote add origin https://code.aliyun.com/chk85106/linuxkai-test.git
git add .
git commit
git push -u origin master

取消pull代码时提示输入 message 信息,

git pull时,有时候会提示如上信息,会让我输入merge的message信息,git会自动 打个编辑器,让我们输入,这在我们使用脚本执行的时候,特别不方便,这时我们可以让他不显示

解决方法

方法1: 在git pull的时候添加 –no-edit的参数

git pull --no-edit

方法2: 修改配置文件,编辑~/.gitconfig

[core]
	mergeoptions = --no-edit 

方法3: 终端中执行

git config --global core.mergeoptions --no-edit

说明: 但似乎2.0以下的版本是不能用的,具体哪个版本没有测试过(1.9的不支持这个参数)

创建,推送 /dev/stable分支时报错

问题提示如下

➜ git:(dev/stable) git push --set-upstream origin dev/stable
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: error: cannot lock ref 'refs/heads/dev/stable': 'refs/heads/dev' exists; cannot create 'refs/heads/dev/stable'
To http://git.gitlab.cn/content/test-svr.git
 ! [remote rejected] dev/stable -> dev/stable (failed to update ref)
error: failed to push some refs to 'http://git.gitlab.cn/content/test-svr.git'

问题原因

出现此问题的原因是 之前已经创建了dev分支,再创建dev/stable分支时就冲突了

解决方法

  1. 把原来的dev分支删除或者改名
  2. 本地更新远程分支列表
git remote update origin --prune

远程删除了分支,但本地还可以看到,如何更新本地远程跟踪分支

git remote prune origin

fatal: unknown index entry format 0x72740000

解决办法

rm -rf .git/index
git reset