zoukankan      html  css  js  c++  java
  • 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
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    mfc中的_T
    zmq的send
    c++内存相关函数
    如何运行linux shell程序
    Dockfile中的命令如何在.sh中执行
    Linux 错误: $' ': command not found
    实战ZeroMQ的PUSH/PULL推拉模式
    Servlet笔记
    进程控制块(PCB)
    Makefile规则介绍
  • 原文地址:https://www.cnblogs.com/wangzepu/p/13129722.html
Copyright © 2011-2022 走看看