Git 命令

Nov 8, 2015


config

禁止 CRLF 替换 LF

git add时提示如下:

$ git add .
warning: LF will be replaced by CRLF in 【file】.
The file will have its original line endings in your working directory

详情见这里,解决方案为:

git config --global core.autocrlf false

clone

所有分支

git clone

指定分支

git clone -b [branch] [remote_repo]

commit

重新生成 Change-Id

git commit --amend -m "【提交注释】"

修改未push的注释

git commit --amend

修改已push的注释

首先执行命令查看最近的提交:

git rebase -i head~3	//显示最新的三次提交

结果如下:

pick 4ba8742 add:新增spring依赖注入方式
pick ba88dea update:spring依赖注入方式格式修改
pick f7fda7a update:Spring依赖注入的方式内容补充

要修改哪一行注释,就把那行的pick改成edit,然后保存退出
这时候会提示:

Stopped at da0cccdef784e4b7f5809ce4a28743d3ff235eaa... update:spring依赖注入方式格式修改
You can amend the commit now, with

	git commit --amend

Once you are satisfied with your changes, run

	git rebase --continue

提示的内容是说:
如果修改注释就执行git commit –amend
如果对现状满意,就git rebase –continue

在执行git commit –amend修改注释后,普通push失败,需要强制push

git push -f origin HEAD:master

强制push之后,执行git status命令,出现提示

interactive rebase in progress; onto 18bb6af
Last commands done (2 commands done):
   pick 4ba8742 add:新增spring依赖注入方式
   edit da0cccd update:spring依赖注入方式格式修改
Next command to do (1 remaining command):
   pick b717dc1 update:Spring依赖注入的方式内容补充
  (use "git rebase --edit-todo" to view and edit)
You are currently editing a commit while rebasing branch 'master' on '18bb6af'.
  (use "git commit --amend" to amend the current commit)
  (use "git rebase --continue" once you are satisfied with your changes)

如果对修改注释已经满意,即可执行continue命令回到master分支

git rebase --continue

push

推送到新分支

git push origin [remote_branch_name]

回滚

和远端同步

git reset --hard origin/master
放弃本地修改和远端的master分支同步

reset –hard

#回滚到ID指定的提交,将ID之后的提交舍弃
git reset --hard 【ID】
#将最近3次的提交回滚
git reset --hard HEAD~3

revert

该命令只撤销指定版本号的提交,而不是撤销指定版本号及以后的提交

比如:
前天提交A
昨天提交B
今天提交C
使用 git revert B 命令,只回退B提交,而不会回退C提交

git revert [版本号]
git push

cherry-pick

重新提交、选择合并

如果某提交被错误覆盖、删除或者回退,可以使用cherry-pick命令重新提交
如果需要将A分支的某个提交合并到B分支,可以使用该命令

git cherry-pick [版本号]
#若有冲突,手动解决冲突后
git cherry-pick --continue 
#冲突解决完毕后
git push
#若因为各种原因找回失败,需要取消
git cherry-pick --abort

Fork

fork同步

Fork的项目要保持和主库同步,可使用如下命令:

git remote add [<options>] <name> <url>

eg:

git remote add test path
git fetch test
git merge test/master

若不小心 remote add 了错误路径,可使用如下命令:

git remote test set-url URL	#修改
git remote rm test		#删除

tag

查看

git tag			#查看当前仓库的所有标签
git tag -l 'v3.*'	#检索标签
git show [tag name]	#查看标签版本信息

获取

git fetch origin tag [tag name]		 #获取远程tag

创建

git tag [tag name]
git tag -a [tag name] -m [说明]
git tag -a [tag name] [版本号] #给某个版本打标签

切换

git checkout [tag name]

删除

git tag -d [tag name] #删除本地tag
git push origin :refs/tags/[tag name] #推送空tag到远程,相当于删除远程tag
git push origin --delete tag [tag name] #直接删除远程tag

#删除远端所有tag,慎用
git show-ref --tag | awk '/(.*)(s+)(.*)$/ {print ":" $2}' | xargs git push origin

#删除本地所有 v1.1.0.x 的tag
git tag | grep "v1.1.0.d$" | xargs git tag -d

推送

git push origin [tag name] #推送指定标签
git push --tags		  #推送所有标签

branch

查看

git branch -a #查看远程分支
git remote show origin #查看远程分支状态

删除

git push origin --delete [branchName] #删除远程分支
git push origin :[branchName] #推送空分支到远程,相当于删除远程分支
git remote prune origin	#删除不存在对应远程分支的本地分支
git fetch -p	#同上

merge

撤销

git reset --hard

stash

git stash pop	#找回第1个
git stash apply stash@{1}	#找回第2个
git stash drop id	#删除一个
git stash drop stash@{0}	#删除指定序号的
git stash clear	#删除所有

alias

git config --global alias.st status
git config --global alias.unstage 'reset HEAD'
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

reset

找回

若误删本地提交或者分支

1.git reflog	#查看提交记录
2.git reset id –-hard	#恢复到commit号为 id 的提交,亦可使用HEAD@{1}

log

查看指定文件历史版本

git log --pretty=oneline [file]

show

查看指定版本的修改内容

git show [版本号]

切换远程库

公司Git的IP地址发生变化,在不重新检出的前提下如何解决?

  1. 打开项目根目录下的 .git 目录下的 config 文件
  2. 修改文件中的 url 路径即可

迁移

迁移而不丢失log的步骤

1). 从原地址克隆一份裸版本库到本地,比如原本托管于 GitHub。
git clone --bare git://github.com/username/project.git

2). 然后到新的 Git 服务器上创建一个新项目,比如 GitCafe。

3). 以镜像推送的方式上传代码到 GitCafe 服务器上。
cd project.git
git push --mirror git@gitcafe.com/username/newproject.git

4). 删除本地代码
cd ..
rm -rf project.git

5). 到新服务器 GitCafe 上找到 Clone 地址,直接 Clone 到本地就可以了。
git clone git@gitcafe.com/username/newproject.git

查看分支创建时间

要求分支名称写全;有可能不太准确

# 本地
git reflog show --date=iso master
# 远程
git reflog show --date=iso remotes/origin/master