显示分支差异:
git diff branch1 branch2 --stat //显示出所有有差异的文件列表
git diff branch1 branch2 文件名(带路径) //显示指定文件的详细差异
git diff branch1 branch2 //显示出所有有差异的文件的详细差异
提交:
提交代码到暂存区 git commit -m [message]
提交指定文件到暂存区 git commit [filename1] [filename2] … -m [messqge]
提交工作区自上次commit之后的变化 git commit -a
分支:
更新 git fetch (远程分支删除后,更新到本地)
查看本地分支 git branch
查看远程分支 git branch -r
新建分支并切换到该分支 git checkout -b [branch]
在现有分支与指定远程分支间建立追踪关系 git branch —set-upstream [branch] [remote-branch]
合并指定分支到当前分支 git merge [branch]
删除分支 git branch -D [branch-name]
删除远程分支 git push origin --delete [branch-name] git branch -dr [remote/branch]
从master分支拉取分支开发
git checkout master 切换到master分支
git checkout -b [branch-name] 从master分支创建并切换到新分支
git push origin [branch-name] 将新分支推送到远程
git branch —set-upstream-to=origin/[branch-name] 与远程分支创建关联
合并分支:
git merge [branch-name] 合并分支到当前分支
git push 推送到远程
查看本地分支追踪的远程分支之间的对应关系:
git branch -vv
查看信息:
git status 查看是否有文件变动
git log 查看当前分支的历史版本
git log --stat 显示commit历史,已经每次commit的文件变化
git log -5 --pretty --oneline 显示过去5次提交
本地不小心merge错分支:(merge以后无操作,无提交)
git reflog 查看版本号
git checkout [merge操作时所在的分支]
git reset —hard [merge前的版本号]
git 丢弃本地commit
查看分支
-
git branch
-
git branch -a 查看远端所有分支
-
git branch -v 查看本地分支,以及分支上最新的commit提交信息
-
git branch -vv 在-v基础上,多现实本地分支和远程分支的关联关系
查看某次commit的修改
-
git show commit号
查看某个文件的历史修改记录
-
git log 文件名
-
git log -p 文件名
-
git log --author=提交人 只查看提交人的提交记录
-
git log --pretty=oneline 单行显示提交记录
-
git log --name-only 显示每次commit修改的文件列表
-
git log --name-status 查看commit记录里的文件修改状态
-
git log --grep='abc' 显示commit描述匹配abc的commit记录
-
git log -S "代码内容" 按代码内容搜索commit记录,如果代码内容部分想用正则表达式,则将-S换成-G
-
git log --pretty='%H %Cblue%cd %C(yellow)%cn %Cred%s' 按commit号+提交日期+提交人+commit标题 显示
-
pretty格式
-
%H 提交对象(commit)的完整哈希字串
-
%h 提交对象的简短哈希字串
-
%T 树对象(tree)的完整哈希字串
-
%t 树对象的简短哈希字串
-
%P 父对象(parent)的完整哈希字串
-
%p 父对象的简短哈希字串
-
%an 作者(author)的名字
-
%_ae 作者的电子邮件地址 (由于新浪博客显示问题,请去除 %_ae 中的 _ )
-
%_ad 作者修订日期(可以用 -date= 选项定制格式)(由于新浪博客显示问题,请去除 % ad 中的 _ )
-
%ar 作者修订日期,按多久以前的方式显示
-
%cn 提交者(committer)的名字
-
%_ce 提交者的电子邮件地址(由于新浪博客显示问题,请去除 %_ce 中的 _ )
-
%_cd 提交日期 (由于新浪博客显示问题,请去除 %_cd 中的 _ )
-
%cr 提交日期,按多久以前的方式显示
-
%d: ref名称
-
%s: 提交的信息标题
-
%b: 提交的信息内容
-
%Cred: 切换到红色
-
%Cgreen: 切换到绿色
-
%_Cblue: 切换到蓝色 (由于新浪博客显示问题,请去除 %_Cblue 中的 _)
-
%Creset: 重设颜色
-
%C(...): 制定颜色, as described in color.branch.* config option
-
%n: 换行
查看未commit的本地修改
-
git diff
-
git diff 文件名
从服务器拉代码
git pull --rebase (推荐)会把本地未push得commit放到缓冲区,然后把远程最新版本拉过来,再应用本地commit,这样不会造成本地有新commit时,merge的效果。 git pull 直接更新,若本地和远端都有新commit,都执行自动merge。
拉分支
git checkout -b branchName 创建本地新分支 git checkout -b branchName remotes/origin/branchName 以远端分支创建本地新分支 git push origin $newBranch:$newBranch 将本地分支提交到远端进行创建
删除远程分支
-
$ git push origin :master
-
# 等同于
-
$ git push origin --delete master
提交修改
git add . 将修改加到stage状态区 git commint -m "注释" git push 推送所有分支 git push origin develop 只推送develop分支
添加文件
git add -A
删除文件
git rm 文件名 git rm -r 目录名
Push
git push push所有分支 git push origin master 将本地主分支推到远程主分支 git push –u origin master 将本地主分支推到远程(如无远程主分支则创建,用于初始化远程仓库) git push origin <local_branch> 创建远程分支,origin是远程仓库名。 git push origin <local_branch>:<remote_branch> 创建远程分支 ###强制push 如果远程主机的版本比本地版本更新,推送时Git会报错,要求先在本地做git pull合并差异,然后再推送到远程主机。这时,如果你一定要推送,可以使用–force选项。 git push --force origin
合并分支
merge
git merge remotes/origin/mc-s-3 将远端mc-s-3分支merge到本地
rebase
git rebase develop git rebase remotes/origin/develop
配置mergetool
git config –global merge.tool bc3 git config –global mergetool.bc3.path 软件执行文件地址
merge策略
-
Git merge 策略的总结:
-
1、使用 -s 指定策略,使用 -X 指定策略的选项
-
2、默认策略是recursive
-
3、策略有 ours,但是没有theirs (Git老版本好像有)
-
4、策略ours直接 忽略 合并分支的任何内容,只做简单的合并,保留分支改动的存在
-
5、默认策略recursive有选项ours 和 theirs
-
6、-s recursive -X ours 和 -s ours 不同,后者如第3点提到直接忽略内容,但是前者会做合并,遇到冲突时以自己的改动为主
-
7、-s recursive -X theirs的对立面是 -s recursive -X ours
-
`注:-s recursive -X ours 合并分支,冲突时以本地为主`
回退未commit的修改
git checkout [path] 将指定路径的修改还原到最新版本
回退已commit,未push的修改
git reset HEAD <file> --mixed 选项:默认的 --soft 选项:改动会回退到stage状态 --hard 选项:改动会直接丢失。 git rebase -i 想要删除的commit的前一个commit号。 出来的界面里,将想要删除的commit描述改为drop,保存即可。
回退已push的修改
git revert 指定的commit号。跳出来的界面,选择要回退的commit内容(取消前面的#) 可以随便选某个commit删除 若revert一个merge的commit,则要指定parent 号 git revert commit 号 -m 1。 这样就选parent 1,那么parent 1又是哪一个呢?一般来说,如果你在master上mergezhc_branch,那么parent 1就是master,parent 2就是zhc_branch.
重排commit顺序
git rebase -i commit号 出来的界面中,将列出来的commit行重新排序再保存,就等于修改commit顺序了。
修改commit的描述
未push
方法一: git rebase -i commit号 对应commit号前改为edit,保存。出来后git commit --amend。将commit描述修改掉,保存。 出来后再git rebase --continue即可。 方法二: git commit --amend 修改最近的一次commit
代码仓库迁移
git clone --bare robbin_site robbin_site.git git remote remove origin git remote add origin git@120.27.160.167:ZCY/doc-round-1.git git push –-all -–progress origin
导出指定版本的代码版本
git archive -o ../updated.zip HEAD $(git diff --name-only HEAD^) 例如:git archive -o ./version.zip 指定commit号 或者 git archive --format zip -output "./archive.zip" HEAD
tag功能
创建tag
git tag -a v1.0.0 -m '备注'
查看tag
git tag
切换tag
git checkout tag名
删除tag
git tag -d v1.0.0
指定commit打tag
git tag -a v1.0.0 commit号
发布标签
git push origin v1.0.0 将本地v1.0.0标签推送到git服务器 git push origin -tags 将本地所有tag一次性推送到git服务器
创建补丁
当前分支所有超前master的提交:
git format-patch -M master
某次提交以后的所有patch:
git format-patch 4e16 --4e16指的是commit名
从根到指定提交的所有patch:
git format-patch --root 4e16
某两次提交之间的所有patch:
git format-patch 365a..4e16 -o <patch_dir> --365a和4e16分别对应两次提交的名称
某次提交(含)之前的几次提交:
git format-patch –n 07fe --n指patch数,07fe对应提交的名称 故,单次提交即为: git format-patch -1 07fe
应用补丁
方法一(推荐)
-
1、在同一个仓库下找到对应的commit号
-
2、切换到对应分支下,git cherry-pick commit 号
-
3、如果冲突,git mergetool 解决冲突。
-
4、git status根据提示commit代码,并push
-
cherry-pick 一个commit区间
-
git cherry-pick <start-commit-id>^..<end-commit-id>
查看未push到远程仓库的commit
1、查看到未传送到远程代码库的提交次数
-
git status //只能看次数
-
显示结果类似于这样:
-
# On branch master
-
# Your branch is ahead of 'origin/master' by 2 commits.
2、查看到未传送到远程代码库的提交描述/说明
-
git cherry -v
-
显示结果类似于这样:
-
+ b6568326134dc7d55073b289b07c4b3d64eff2e7 add default charset for table items_has_images
-
+ 4cba858e87752363bd1ee8309c0048beef076c60 move Savant3 class into www/includes/class/
3、查看到未传送到远程代码库的提交详情
-
git log master ^origin/master
-
这是一个git log命令的过滤,^origin/master可改成其它分支。
-
显示结果类似于这样:
-
commit 4cba858e87752363bd1ee8309c0048beef076c60
-
Author: Zam <zam@iaixue.com>
-
Date: Fri Aug 9 16:14:30 2013 +0800
-
move Savant3 class into www/includes/class/
-
commit b6568326134dc7d55073b289b07c4b3d64eff2e7
-
Author: Zam <zam@iaixue.com>
-
Date: Fri Aug 9 16:02:09 2013 +0800
-
add default charset for table items_has_images
查看两个分支的差异
-
git diff branch_a..branch_b
-
git difftool develop..pre-online --dir
Git stash 暂存
-
git stash
-
将当前工作区里未commit的修改放到暂存区,将代码恢复到最近的一次修改
-
git stash list
-
查看暂存区的列表
-
git show stash@{0}
-
see the last stash
-
git stash pop
-
apply lastest stash and remove it from th list
-
git stash clear
-
清空暂存栈
-
git stash apply stash@{1}
-
指定暂存区里的某一次stash,应用到本地
删除本地git branch -a 能看到,而远程已经删掉的分支记录
-
git fetch -p