- config
- clone
- commit
- push
- 回滚
- cherry-pick
- Fork
- tag
- branch
- merge
- stash
- alias
- reset
- log
- show
- 切换远程库
- 迁移
- 查看分支创建时间
config
禁止中文路径转义
详情见这里,解决方案为:
git config --global core.quotepath false
禁止 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地址发生变化,在不重新检出的前提下如何解决?
- 打开项目根目录下的 .git 目录下的 config 文件
- 修改文件中的 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