git使用持续更新

目的

作为开发很多命令不经常用的话会忘记,特别是对于英语不是很好的同学,这里记录一下自己使用过的git相关功能和方法,以便后续忘记或者有新的使用心也可以再次记录更新.

环境

Linux-Ubuntu 18.04

从无到有

1.安装git

sudo apt-get install git

2.用户邮箱配置

git  config -- global  user.name  shenghuajiang       //配置用户名
git config --global user.email shenghuajiang@xx.com.cn  //配置邮箱
git config --list   //查看配置信息,是否配置成功

3.SSH秘钥生成

git服务器一般使用 SSH 公钥进行认证,因此客户端需提供公钥保存在git服务器上,默认本地SSH秘钥放在~/.ssh 目录下

jshh@jeson-ThinkPad-T470:~/.ssh$ ls
id_rsa  id_rsa.pub  known_hosts

如果没有id_rsa 和 id_rsa.pub文件,则主动生成如下:

jshh@jeson-ThinkPad-T470:ssh-keygen

或者生成指定邮箱的公钥

jshh@jeson-ThinkPad-T470:ssh-keygen -t rsa -C"your_email@youremail.com"

ssh-keygen 会确认密钥的存储位置(默认是 .ssh/id_rsa),然后它会要求你输入两次密钥口令。如果你不想在使用密钥时输入口令,将其留空即可。

生成公钥之后,我们将id_rsa.pub文件读取出来,复制粘贴放到git 服务器(设置中添加秘钥即可),这样客户端连接指定服务器时,服务器进行秘钥解密成功之后就可以正常使用git仓库了.

jshh@jeson-ThinkPad-T470:~/.ssh$ cat id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDsMMtAENJ0kNIEIKMtIPLxAC8KyoAjZUAAeYma8Y9qq/1Lcl7ZXlFGDWu5JLKb3KgfNWSPJlkMG0FJmMMVuI0kogjY7WQ1iJDdVRZ4m2Cw4olv2D2uJlskHYs8TgojoMEEeRj7u6UNCxZN1x2xY2NGefb3vLySZD1pEn/I6u5TOSUk5fPIshenghuajiang@xxx.com.cn

git 常用命令

  1. 代码克隆,直接从远程仓库克隆project, 从服务如图,左侧点击clone,copy clone地址
    在这里插入图片描述
jshh@jeson-ThinkPad-T470:~/Project/code/XCMedia2/temp$ git clone ssh://shenghuajiang@xcserver:29418/gkui/apps/XCMedia2
Cloning into 'XCMedia2'...
remote: Counting objects: 2186, done
remote: Finding sources: 100% (177/177)
remote: Total 23820 (delta 31), reused 23736 (delta 31)
Receiving objects: 100% (23820/23820), 180.96 MiB | 29.53 MiB/s, done.
Resolving deltas: 100% (12230/12230), done.
jshh@jeson-ThinkPad-T470:~/Project/code/XCMedia2/temp$ ls
XCMedia2

git pull //同步更新至本地仓库
git pull --rebase // 本地有一次commit,但是未push上传的情况下想直接pull更新并且commit不会被二次merge,将commit changeid始终保存在栈顶
git status //查看本地修改状态
git log //查看修改记录-- commit记录
git add xx.c //添加进备提交
git commit //将备提交中的文件进行提交
git commit --amend //修改最后一次commit的描述或内容, 不新增changeId
git push origin HEAD:refs/for/master //上传同步到远程仓库 'master’是对应分支
git push origin HEAD:refs/changes/272881 //上传同步到指定change,不增加新的changeId,'272881’是对于的change
git reset HEAD~ //重置HEAD, 只是重置了仓库记录,文件内容不会修改,增加多次的话可以HEAD~3 修改数字即可
git reset --soft --hard //重置恢复文件,所有修改的文件全部恢复与仓库记录一致,新增的文件不做删除处理
git clean -df //清除多余的文件文件夹或文件, 完全与仓库一致

如果某个仓库数据较大,而我们只需要其中某个分支数据时,可做如下处理:
sync: git clone -b {branch} --single-branch --depth=1 ssh://xcserver:29418/gkui/delivery/GKAIDelivery {local patch}

git stash 这个功能功能很好用,这里多记录一下
git stash list
查看所有stash 记录

$ git stash list
jshh@jeson-ThinkPad-T470:~/Project/code/XCMedia2/temp/XCMedia2$ git stash list
stash@{0}: WIP on master: 780b84b1 opt: 爱听运营SDK 拉取单曲信息以BITRATE_128K 参数
stash@{1}: WIP on master: 780b84b1 opt: 爱听运营SDK 拉取单曲信息以BITRATE_128K 参数

git stash
会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录。
如下: 新增文件 bd, 进行本地存储

jshh@jeson-ThinkPad-T470:~/Project/code/XCMedia2/temp/XCMedia2$ touch bd
jshh@jeson-ThinkPad-T470:~/Project/code/XCMedia2/temp/XCMedia2$ git stash -a
Saved working directory and index state WIP on master: 780b84b1 opt: 爱听运营SDK 拉取单曲信息以BITRATE_128K 参数
jshh@jeson-ThinkPad-T470:~/Project/code/XCMedia2/temp/XCMedia2$ git stash list
stash@{0}: WIP on master: 780b84b1 opt: 爱听运营SDK 拉取单曲信息以BITRATE_128K 参数
stash@{1}: WIP on master: 780b84b1 opt: 爱听运营SDK 拉取单曲信息以BITRATE_128K 参数
stash@{2}: WIP on master: 780b84b1 opt: 爱听运营SDK 拉取单曲信息以BITRATE_128K 参数

git stash save 'flag’
记录的同步可以添加message, 以后翻看记录时容易知道是哪一笔stash

jshh@jeson-ThinkPad-T470:~/Project/code/XCMedia2/temp/XCMedia2$ touch bbb

jshh@jeson-ThinkPad-T470:~/Project/code/XCMedia2/temp/XCMedia2$ git stash save -a Untracked-files-bbb  
Saved working directory and index state On master: Untracked-files-bbb

jshh@jeson-ThinkPad-T470:~/Project/code/XCMedia2/temp/XCMedia2$ git stash list
stash@{0}: On master: Untracked-files-bbb
stash@{1}: WIP on master: 780b84b1 opt: 爱听运营SDK 拉取单曲信息以BITRATE_128K 参数
stash@{2}: WIP on master: 780b84b1 opt: 爱听运营SDK 拉取单曲信息以BITRATE_128K 参数
stash@{3}: WIP on master: 780b84b1 opt: 爱听运营SDK 拉取单曲信息以BITRATE_128K 参数

git stash pop
将最近或者说栈顶的一笔stash恢复,并删除此次stash

// stash list 4条记录
jshh@jeson-ThinkPad-T470:~/Project/code/XCMedia2/temp/XCMedia2$ git stash list
stash@{0}: On master: Untracked-files-bbb
stash@{1}: WIP on master: 780b84b1 opt: 爱听运营SDK 拉取单曲信息以BITRATE_128K 参数
stash@{2}: WIP on master: 780b84b1 opt: 爱听运营SDK 拉取单曲信息以BITRATE_128K 参数
stash@{3}: WIP on master: 780b84b1 opt: 爱听运营SDK 拉取单曲信息以BITRATE_128K 参数
jshh@jeson-ThinkPad-T470:~/Project/code/XCMedia2/temp/XCMedia2$ 

//git status 与远程仓库完全一致,没有任何修改
jshh@jeson-ThinkPad-T470:~/Project/code/XCMedia2/temp/XCMedia2$ git status
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean

//git stash pop ,恢复栈顶的一笔stash 即stash@{0}
jshh@jeson-ThinkPad-T470:~/Project/code/XCMedia2/temp/XCMedia2$ git stash pop
Already up to date!
On branch master
Your branch is up to date with 'origin/master'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	bbb

nothing added to commit but untracked files present (use "git add" to track)
Dropped refs/stash@{0} (f31cab9493d7bbac1719077195f6f5a7df0da5aa)
//可以看到bbb文件被恢复了,此时再stash list看下只剩3笔stash 之前的栈顶bbb的记录已经被删除
jshh@jeson-ThinkPad-T470:~/Project/code/XCMedia2/temp/XCMedia2$ git stash list
stash@{0}: WIP on master: 780b84b1 opt: 爱听运营SDK 拉取单曲信息以BITRATE_128K 参数
stash@{1}: WIP on master: 780b84b1 opt: 爱听运营SDK 拉取单曲信息以BITRATE_128K 参数
stash@{2}: WIP on master: 780b84b1 opt: 爱听运营SDK 拉取单曲信息以BITRATE_128K 参数

git stash apply
与pop功能一样,但是不会删除被恢复的stash, 并且可增加stash名称恢复指定stash,
比如我们恢复stash@{2}这笔记录,可以看到新文件a被恢复了,但是stash list看stash2并没有被删除:
git stash apply stash@{2}

jshh@jeson-ThinkPad-T470:~/Project/code/XCMedia2/temp/XCMedia2$ git stash apply stash@{2}
Already up to date!
On branch master
Your branch is up to date with 'origin/master'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	a
	bbb

nothing added to commit but untracked files present (use "git add" to track)

jshh@jeson-ThinkPad-T470:~/Project/code/XCMedia2/temp/XCMedia2$ git stash list
stash@{0}: WIP on master: 780b84b1 opt: 爱听运营SDK 拉取单曲信息以BITRATE_128K 参数
stash@{1}: WIP on master: 780b84b1 opt: 爱听运营SDK 拉取单曲信息以BITRATE_128K 参数
stash@{2}: WIP on master: 780b84b1 opt: 爱听运营SDK 拉取单曲信息以BITRATE_128K 参数

git stash drop
后面可以跟着stash名字。删除一笔stash, 默认是删除栈顶的一个

git stash clear
删除所有缓存的stash。

git stash show
查看指定stash的diff,后面可以跟着stash名字

git stash show -p
可以查看特定stash的全部diff,详细的.

从stash创建分支
如果你储藏了一些工作,暂时不去理会,然后继续在你储藏工作的分支上工作,你在重新应用工作时可能会碰到一些问题。如果尝试应用的变更是针对一个你那之后修改过的文件,你会碰到一个归并冲突并且必须去化解它。如果你想用更方便的方法来重新检验你储藏的变更,你可以运行 git stash branch,这会创建一个新的分支,检出你储藏工作时的所处的提交,重新应用你的工作,如果成功,将会丢弃储藏。

$ git stash branch testchanges
Switched to a new branch "testchanges"
# On branch testchanges
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#      modified:   index.html
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   lib/simplegit.rb
#
Dropped refs/stash@{0} (f0dfc4d5dc332d1cee34a634182e168c4efc3359)

暂存未跟踪或忽略的文件

默认情况下,git stash会缓存下列文件:

  • 添加到暂存区的修改(staged changes)
  • Git跟踪的但并未添加到暂存区的修改(unstaged changes)

但不会缓存一下文件:

  • 在工作目录中新的文件(untracked files)
  • 被忽略的文件(ignored files)

git stash命令提供了参数用于缓存上面两种类型的文件。使用-u或者–include-untracked可以stash untracked文件。
使用-a或者–all命令可以stash当前目录下的所有修改。

至于git stash的其他命令建议参考Git manual。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值