记录 git 常见的示例,可以用来作为参考使用。
常用命令
----- 强制同步远端数据
$ git fetch --all ← git fetch origin
$ git reset --hard origin/master
$ git pull origin master
----- 配置用户名密码
$ git config --global user.name "Your Name"
$ git config --global user.email "yourname@example.com"
$ git config --list
----- 如果不关心文件权限等,如Windows中
$ git config core.filemode false
----- 初始化或者clone一个库
$ git init
$ git clone https://github.com/user/repository.git
$ git help clone
----- 从远端更新,origin指定远端库,master为远端分支
$ git pull origin master ← 等价于fetch+merge
$ git fetch origin master ← 只获取远程分支
$ git merge origin master ← 手动合并
----- 查看远端服务器,修改origin,以及添加remote分支
$ git remote -v
$ git remote set-url origin http//github.com/repo.git
$ git remote add remote-name https://github.com/user/repo.git
----- 查看提交的差异内容
$ git diff ← 未添加到staged的提交
$ git diff --cached ← 已经staged但是未commited的提交
$ git diff origin/master ← 本地修改与远端master的差异
$ git diff COMMIT1_ID COMMIT2_ID ← 两次提交的修改
$ git diff --name-only COMMIT1_ID COMMIT2_ID ← 只查看修改的文件
$ git diff-tree --no-commit-id --name-only -r COMMIT_ID ← 某次提交的修改
$ git show --pretty="format:" --name-only COMMIT_ID ← 同上
$ git show COMMIT_ID ← 查看详细细节
----- 当前的状态,然后添加到staged,并提交
$ git status
$ git add changed_file.txt
$ git add folder-with-changed-files/
$ git commit -m "Commiting changes"
----- 重命名或者删除一些文件
$ git rm removeme.txt tmp/crap.txt
$ git mv file_oldname.txt file_newname.txt
$ git commit -m "deleting 2 files, renaming 1"
----- 修改最近一次提交的提交信息,并提交到远端
$ git commit --amend -m "New commit message"
$ git push origin master
----- 查看日志
$ git log ← 最近的提交日志
$ git log -2 ← 最近的两个提交日志
$ git log -p -2 ← 查看最近两次的详细日志
$ git log --pretty=oneline ← 单行打印
----- 通过一次提交回退一次提交,会保存一次新的commit
$ git revert dd61ab21
----- 取消一次提交
$ git reset --soft HEAD~1 ← 删除上次commit,文件回退到stage
$ git reset --soft HEAD@{1}
$ git reset --mixed HEAD~1 ← (默认)删除上次commit,文件回退到工作区
$ git reset --hard HEAD~1 ← 彻底回到上次commit,文件回被删除
$ git reset 56e05fced
$ git reset origin/master ← 取消本地未提交的内容
$ git fetch origin ← 或者直接获取远端的内容
$ git reset --hard origin/master ← 接上
----- 插件本地分支以及所有分支
$ git branch
$ git branch -a
----- 生成patch文件
$ git diff > patch-issue-1.patch ← 做些修改,创建patch
$ git add newfile ← 新建文件并创建patch
$ git diff --staged > patch-issue-2.patch ← 接上
$ git add newfile ← 添加新文件,做些修改并创建一个patch
$ git diff HEAD > patch-issue-2.patch ← 接上
$ git format-patch COMMIT_ID ← 为某个commit生成patch
$ git format-patch HEAD~2 ← 最近两次提交生成patch
$ git format-patch origin/master ← 为所有未提交内容生成patch
$ git format-patch --binary --full-index origin/master ← 创建包含二进制文件的patch
$ git apply -v patch-name.patch ← 应用patch
$ git am patch1.patch ← 应用通过format-patch生成的patch
----- 获取最近一次提交的完整CommitID以及短ID
$ git rev-parse HEAD
$ git rev-parse --short HEAD
----- 本地分支重命名(还没有推送到远程)
$ git branch -m oldName newName
----- 远程分支重命名(已经推送远程-假设本地分支和远程对应分支名称相同)
--- A. 重命名远程分支对应的本地分支
$ git branch -m oldName newName
--- B. 删除远程分支
$ git push --delete origin oldName
--- C. 上传新命名的本地分支
$ git push origin newName
--- D. 把修改后的本地分支与远程分支关联
$ git branch --set-upstream-to origin/newName
----- 替换已经存在的远端仓库,也就是报remote origin already exists
----- 1. 首先删除origin的远程仓库
$ git remote rm origin
----- 2. 再添加远程git仓库
$ git remote add origin git@github.com:FBing/java-code-generator
$ git push -u origin --all
$ git push -u origin --tags
TAG 管理
一般可以通过 git describe
显示离当前提交最近的 TAG 信息,如果最近有提交为 TAG,则只显示 TAG 信息,否则会有相关的后缀来描述该 TAG 后有多少次提交,以及最新的 CommitID 。
v1.0.0-rc1-10-g0c2b1cf
v1.0.0-rc 表示TAG的信息
10 表示自从打了v1.0.0-rc1之后又有10提交
g0c2b1cf g为git缩写,用于区分多个版本管理工具;0c2b1cf表示最新提交的CommitID
当知道了该信息后,如果要检查某个版本的问题,可以直接通过 git checkout 0c2b1cf
切换到对应的代码。
多分支管理
首先,TAG 信息是全局的,但是不同的分支可以分别通过 git describe
显示版本信息。例如,在开源开发时有内部版本和开源版本,那么就可以通两个分支进行管理,分别打 TAG 信息。
$ git init
$ echo "Version 1" > README.md
$ git add -A .
$ git commit -m "Version 1.0"
$ git tag -a v1.0 -m 'Version 1.0'
$ git push origin --tags # 提交到远端,或者 git push --tags 也可以
$ git checkout -b master-os
$ echo "Version 2" > README.md
$ git add -A .
$ git commit -m "Version 2.0"
$ git tag -a v2.0 -m 'Version 2.0'
$ git describe --match "v[0-9]*" --abbrev=5 HEAD 2>/dev/null
----- 删除,同时删除远端
$ git tag -d v1.0.0
$ git push origin :refs/tags/v1.0.0
其它
注意,如果要使用 describe
功能,需要使用 Annotated Tags
,否则会报错,命令行中可以通过如下命令执行。
$ git tag -a v1.4 -m "version 1.4"
其它
修改远端地址
主要所有如下几种方法。
----- 0. 查看当前的远端设置
$ git remote -v
----- 1. 直接修改配置
$ git remote set-url origin [URL]
----- 2. 删除后再重新添加
$ git remote rm origin
$ git remote add origin [URL]
参考
- git - 简明指南,一些常见的使用命令。
- git 工具 - 重写历史 很不错的介绍如何重写历史的工具。