git使用记录

oh-my-zsh


初始化(init)
初始化工作目录,使之能够被git管理。会生成子目录“.git”.
$ git init

配置(config)
可以在配置文件.gitconfig中设置,配置文件一般在用户的HOME路径下。也可以通过命令行设置,如
$ git config --global user.email 邮箱机制
$ git config --global user.name 用户名

忽略的文件 ignore files
明确令git不管理某些文件或者目录。通常这是开发者私有文件,或者临时生成的文件。把这些文件或目录名添加到.gitignore文件中。
$ echo"temp/" >> .gitignore
$ echo"private_key" >> .gitignore

添加 (add)
将文件加入缓存区
# 添加文件
$ git add HelloWorld.cpp
# 添加工作目录下的所有文件
$ git add -A

标签(tag)
管理标签,标签一般是对当前git仓库的快照设置一个标志。标签包括轻量(lightweight)与可标注(annotated),后者允许记录更多信息。
# 列出标签
$ git tag
# 创建可标注标签:-a表示可标注类型,-m 选项加一个说明
$ git tag -a v2.0 -m 'my version 2.0'
# 显示某个标签相关的信息
$ git show v2.0
# 把本端的标签v2.0(的版本)推送到远端
$ git push origin v2.0
# 把本端所有的标签(的版本)推送到远端
$ git push origin --tags

切换(checkout)

克隆(clone)
克隆远端的git仓库至本地。并且为新创建仓库中的所有分支绑定对应的远端分支。
# 克隆
$ git clone URI路径
# 浅克隆-快速克隆。注意如果不设置–no–single-branch,只会克隆HEAD所在的分支。--depth表示克隆的最近版本数
$ git clone --depth 1 URI路径

git clone -b branchname git@git.git branchname

提交(commit)
将缓存区(Index)中的内容提交到git仓库中
# 提交时填写说明(message)
$ git commit -m "Added multiplyNumbers() function to HelloWorld.c"
# 提交时带数字签名(由提交者的GPG密钥生成)
$ git commit -S -m "signed commit message"
# 自动将修改的文件加入缓存区(Index),再进行提交。
$ git commit -a -m "Modified foo.php and removed bar.php"
# 把本次提交与最后一次提交合并(删除最后一次提交,加入合并后的提交)
$ git commit --amend -m "Correct message"


显示差异(diff)
显示工作目录、缓存区(Index)、当前git库版本之间的差异
# 显示工作目录与缓存区(Index)之间的差异
$ git diff
# 显示缓存区(Index)与当前git库版本之间的差异
$ git diff --cached
# 显示工作目录与当前git库版本之间的差异
$ git diff HEAD

日志(log)
显示提交到git仓库的记录信息.
# 显示所有提交
$ git log
# 以简化单行方式显示(每个提交)
$ git log --oneline
# 只显示合并的提交
$ git log --merges
# 在提交行的左侧以字符串图像的方式表示版本变化情况
$ git log --graph


合并 (merge)
把外部的分支的修改,合并入当前分支.
# 把其他某个分支,合并入当前分支.
$ git merge branchName
# --no-ff标志标识,对任何情况合并都生成新的版本(因为有的优化可以不生成新的版本)
$ git merge --no-ff branchName

改名 (mv)
改名或者移动文件
#改名文件
$ git mv HelloWorld.c HelloNewWorld.c
#移动文件
$ git mv HelloWorld.c ./new/path/HelloWorld.c
#强制改名或者移动文件(适用于目的文件已经存在的情况)
$ git mv -f myFile existingFile

拖动(pull)
把某个版本从远端git仓库中拖出,并且合并到本端的某个分支
# git pull <remote> <branch>:把远端origin的master分支拖动到本端git仓库
# 过程是拖动到本端的“远端镜像”分支,再合并入其对应的本端分支
$ git pull origin master
# 如果当前分支与某个“远端分支”绑定,则先把其远端分支拖动到本地,再合并入当前分支
$ git pull
# 合并到本端分支的策略是采用rebase(即本端修改在远端最新版本之上的单线演进)
$ git pull origin master --rebase

推送(push)
把本端分支与修改推送至远端的分支并合并
# git push <remote> <branch>:把本端的branch分支推送到远端git仓库中
$ git push origin master
# 如果不设置远端名称,将会推送所有与远端绑定的本端分支
$ git push
#在命令中加-u标志,可以在推送之前立即设置本端分支的远端绑定(以后无需再设)。以下含义是在将本端的master分支与origin(远端名)上的master绑定
$ git push -u origin master

暂存(stash)
保存当前暂存区(Index)与工作目录中的变更内容到git中的某个存储区域。再必要的时候,可以取出这些变更并合并到当前工作目录与暂存区(Index)
如果工作区由变更为保存,而执行pull操作会报错。因此需要先用stash保存修改,并使得工作区变为“干净”状态。此时可以执行pull操作。
stash以类似堆栈的方式存储保存的"修改"
#列出所有存储的“修改”,最新的位于最上部
$git stash list
# 弹出堆栈顶部的“修改”,并实施于工作目录或者暂存区(Index)。
$ git stash pop
# 实施堆栈顶部的“修改”,但不弹出
$ git stash apply
# 实施堆栈顶部起第2个的“修改”(0序),但不弹出
git stash apply stash@{1}
# 抛弃/删除堆栈顶部的“修改”
git stash drop

重整(rebase)
把一个分支上的提交转移到另外一个分支上。这样有可能把两个分支合并成一个。
一个重要准则:不要重整已经提交到公共仓库的版本。
# 把特性开发分支重整到主分支上
$ git rebase master experimentBranch

复位 (reset)
通常reset命令,变更当前的HEAD某个版本,也可以根据HEAD指向的内容,更新存储区(Index)或工作目录。
# 复位缓存区,用HEAD指向的内容更新缓存区(Index)
$ git reset
# 复位缓存区,用HEAD指向的内容更新缓存区(Index)与工作目录
$ git reset --hard
# 先移动HEAD指针,再用$get reset的操作.
$ git reset 31f2bb1
# 先移动HEAD指针,再用git reset --hard的操作
$ git reset --hard 31f2bb1
# 只移动HEAD指针
$ git reset --soft31f2bb1

参考日志 (reflog)
reflog以时间由近到远列出所有的git操作, 缺省时间长度是90天。因为有些操作的结果没有直接的版本或标签对应,比如历史版本经过rebase等原因在现有版本树中已经找不到了,这些历史版本都可以在reflog中找到。
# 列出参考日志
$ git reflog
git reflog的输出
#如果上述日志中显示最后一次操作是在master分支的hard reset。要恢复到原来的master指针,并更新工作目录与缓存区(Index)的内容,找到master分支初始状态时对应的Ref值


回退(revert)
回退用于对某个提交的修改,做反操作的修改,在效果上实现回退。回退在git仓库中产生一个新的提交。回退针对的“提交”与该回退之间,可能存在若干其他的提交。但“回退”只回退对应提交的修改,而保留其他提交的修改。
# 回退特定提交
$ git revert <commit>

删除(rm)
删除文件的同时,也变更git工作目录与缓存区(Index)的状态
# 删除文件
$ git rm /pather/to/the/file/HelloWorld.c


子模块的添加
添加子模块非常简单,命令如下:
git submodule add <url> <path>
其中,url为子模块的路径,path为该子模块存储的目录路径。
执行成功后,git status会看到项目中修改了.gitmodules,并增加了一个新文件(为刚刚添加的路径)
git diff --cached查看修改内容可以看到增加了子模块,并且新文件下为子模块的提交hash摘要
git commit提交即完成子模块的添加

子模块的使用
克隆项目后,默认子模块目录下无任何内容。需要在项目根目录执行如下命令完成子模块的下载:
git submodule init
git submodule update

git submodule update --init --recursive
执行后,子模块目录下就有了源码

子模块的更新
子模块的维护者提交了更新后,使用子模块的项目必须手动更新才能包含最新的提交。
在项目中,进入到子模块目录下,执行 git pull更新,查看git log查看相应提交。
完成后返回到项目目录,可以看到子模块有待提交的更新,使用git add,提交即可。

删除子模块
有时子模块的项目维护地址发生了变化,或者需要替换子模块,就需要删除原有的子模块。
删除子模块较复杂,步骤如下:
rm -rf 子模块目录 删除子模块目录及源码
vi .gitmodules 删除项目目录下.gitmodules文件中子模块相关条目
vi .git/config 删除配置项中子模块相关条目
rm .git/module/* 删除模块下的子模块目录,每个子模块对应一个目录,注意只删除对应的子模块目录即可
执行完成后,再执行添加子模块命令即可,如果仍然报错,执行如下:
git rm --cached 子模块名称
完成删除后,提交到仓库即可。

子项目一起clone下来:
git clone --recursive [address]
子项目初始化:
git submodule update --init --recursive
子项目更新:
git submodule foreach --recursive git checkout master
git submodule foreach git pull

git ci .
git log -p -1
git commit --amend
git rebase


查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>


git branch
git branch -a/-r
git branch -vv         查看本地分支对应的远程分支
git branch dev      创建名为dev的分支,创建分支时需要是最新的环境,创建分支但依然停留在当前分支
git branch -m oldName newName    给分支重命名
git branch -d dev      删除dev分支,
git branch -D dev      强制删除dev分支,

git checkout filename     放弃filename文件的修改
git checkout .            放弃当前文件夹的修改
git checkout master     切换到分支master
git checkout -b master  创建master分支并切换到master分支

git tag -a 测试交付版 -m '安可一体化-安全登录测试交付版'


打 patch
git format-patch -1 f4f8a67216122b0d30fab52065879799f72c4d2d
合patch
git apply PATCH --reject
edit edit edit(译注:根据.rej文件手动解决所有冲突)
git add FIXED_FILES
git am --resolved

有变化的文件打包
1026  git log
1027  git diff f3ddab13328530f30517083645bec5e4d98e8ed1 5918fb8896abf73e7d00dfc1053447d0741bb4c6 --name-only
1028  git diff f3ddab13328530f30517083645bec5e4d98e8ed1 5918fb8896abf73e7d00dfc1053447d0741bb4c6 --name-only |xargs -I {} ls -al {}
1029  git diff f3ddab13328530f30517083645bec5e4d98e8ed1 5918fb8896abf73e7d00dfc1053447d0741bb4c6 --name-only |xargs -I {} tar zcvf test_{}.tar.gz {}

git diff f3ddab13328530f30517083645bec5e4d98e8ed1 9695732a3d0b7d96b0c2c12df3ad55b8fd6c7a83 --name-only |xargs tar zcvf test.tar.gz

    所有文件压缩到一个文件里
     |xargs tar zcvf test.tar.gz
    每个文件压缩到每个文件里
     |xargs -I {} tar zcvf test_{}.tar.gz {}

加-i 参数直接用 {}就能代替管道之前的标准输出的内容;加 -I 参数 需要事先指定替换字符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值