git使用指南

显示分支差异:
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
 
 

查看分支

  1. git branch
  2. git branch -a 查看远端所有分支
  3. git branch -v 查看本地分支,以及分支上最新的commit提交信息
  4. git branch -vv 在-v基础上,多现实本地分支和远程分支的关联关系

查看某次commit的修改

  1. git show commit号

查看某个文件的历史修改记录

  1. git log 文件名
  2. git log -p 文件名
  3. git log --author=提交人 只查看提交人的提交记录
  4. git log --pretty=oneline 单行显示提交记录
  5. git log --name-only 显示每次commit修改的文件列表
  6. git log --name-status 查看commit记录里的文件修改状态
  7. git log --grep='abc' 显示commit描述匹配abc的commit记录
  8. git log -S "代码内容" 按代码内容搜索commit记录,如果代码内容部分想用正则表达式,则将-S换成-G
  9. git log --pretty='%H %Cblue%cd %C(yellow)%cn %Cred%s' 按commit号+提交日期+提交人+commit标题 显示
  10. pretty格式
  11. %H 提交对象(commit)的完整哈希字串 
  12. %h 提交对象的简短哈希字串 
  13. %T 树对象(tree)的完整哈希字串 
  14. %t 树对象的简短哈希字串 
  15. %P 父对象(parent)的完整哈希字串 
  16. %p 父对象的简短哈希字串 
  17. %an 作者(author)的名字 
  18. %_ae 作者的电子邮件地址 (由于新浪博客显示问题,请去除 %_ae 中的 _ )
  19. %_ad 作者修订日期(可以用 -date= 选项定制格式)(由于新浪博客显示问题,请去除 % ad 中的 _ )
  20. %ar 作者修订日期,按多久以前的方式显示 
  21. %cn 提交者(committer)的名字 
  22. %_ce 提交者的电子邮件地址(由于新浪博客显示问题,请去除 %_ce 中的 _ )
  23. %_cd 提交日期 (由于新浪博客显示问题,请去除 %_cd 中的 _ )
  24. %cr 提交日期,按多久以前的方式显示 
  25. %d: ref名称
  26. %s: 提交的信息标题
  27. %b: 提交的信息内容
  28. %Cred: 切换到红色 
  29. %Cgreen: 切换到绿色 
  30. %_Cblue: 切换到蓝色 (由于新浪博客显示问题,请去除 %_Cblue 中的 _)
  31. %Creset: 重设颜色 
  32. %C(...): 制定颜色, as described in color.branch.* config option
  33. %n: 换行

查看未commit的本地修改

  1. git diff
  2. 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 将本地分支提交到远端进行创建

删除远程分支

  1. $ git push origin :master
  2. # 等同于
  3. $ 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策略

  1. Git merge 策略的总结:
  2. 1、使用 -s 指定策略,使用 -X 指定策略的选项
  3. 2、默认策略是recursive
  4. 3、策略有 ours,但是没有theirs (Git老版本好像有)
  5. 4、策略ours直接 忽略 合并分支的任何内容,只做简单的合并,保留分支改动的存在
  6. 5、默认策略recursive有选项ours 和 theirs
  7. 6、-s recursive -X ours 和 -s ours 不同,后者如第3点提到直接忽略内容,但是前者会做合并,遇到冲突时以自己的改动为主
  8. 7、-s recursive -X theirs的对立面是 -s recursive -X ours
  9. `注:-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. 1、在同一个仓库下找到对应的commit号
  2. 2、切换到对应分支下,git cherry-pick commit 号
  3. 3、如果冲突,git mergetool 解决冲突。
  4. 4、git status根据提示commit代码,并push
  5. cherry-pick 一个commit区间
  6. git cherry-pick <start-commit-id>^..<end-commit-id>

查看未push到远程仓库的commit

1、查看到未传送到远程代码库的提交次数

  1. git status //只能看次数
  2. 显示结果类似于这样:
  3. # On branch master
  4. # Your branch is ahead of 'origin/master' by 2 commits.

2、查看到未传送到远程代码库的提交描述/说明

  1. git cherry -v
  2. 显示结果类似于这样:
  3. + b6568326134dc7d55073b289b07c4b3d64eff2e7 add default charset for table items_has_images
  4. + 4cba858e87752363bd1ee8309c0048beef076c60 move Savant3 class into www/includes/class/

3、查看到未传送到远程代码库的提交详情

  1. git log master ^origin/master
  2. 这是一个git log命令的过滤,^origin/master可改成其它分支。
  3. 显示结果类似于这样:
  4. commit 4cba858e87752363bd1ee8309c0048beef076c60
  5. Author: Zam <zam@iaixue.com>
  6. Date: Fri Aug 9 16:14:30 2013 +0800
  7. move Savant3 class into www/includes/class/
  8. commit b6568326134dc7d55073b289b07c4b3d64eff2e7
  9. Author: Zam <zam@iaixue.com>
  10. Date: Fri Aug 9 16:02:09 2013 +0800
  11. add default charset for table items_has_images

查看两个分支的差异

  1. git diff branch_a..branch_b
  1. git difftool develop..pre-online --dir

Git stash 暂存

  1. git stash
  2.  将当前工作区里未commit的修改放到暂存区,将代码恢复到最近的一次修改
  3. git stash list
  4.  查看暂存区的列表
  5. git show stash@{0} 
  6. see the last stash
  7. git stash pop
  8. apply lastest stash and remove it from th list
  9. git stash clear
  10.  清空暂存栈
  11. git stash apply stash@{1}
  12.  指定暂存区里的某一次stash,应用到本地

删除本地git branch -a 能看到,而远程已经删掉的分支记录

  1. git fetch -p
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/wangzepu/p/13129722.html