多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 一、打包commit 提交的文件 我们先通过 git log 命令查看commitId,然后复制commitId执行以下命令,就会创建一个基于指定提交的文件压缩包。 这个功能一般用来打包上线的。 ``` $ git diff-tree -r --no-commit-id --name-only 042774569dfa02bbe967db0346ec6f3aa992a0ab | xargs tar -rf update_20181114.tar ``` 如果替换有问题,可以先删除再创建 ``` $ rm -rf update_20181114.tar && git diff-tree -r --no-commit-id --name-only 042774569dfa02bbe967db0346ec6f3aa992a0ab | xargs tar -rf update_20181114.tar ``` ![](https://box.kancloud.cn/40f399bfc4aec6557c371f262264bdb5_586x33.jpg) ## 二、git中的origin介绍 假如我们在终端直接clone一个远程仓库 ``` $ git clone https://github.com/user1/repository ``` 执行命令查看一下远程仓库信息 ``` $ git remote -v ``` 会看到 ``` origin https://github.com/user1/repository.git (fetch) origin https://github.com/user1/repository.git (push) ``` 那为什么会有origin呢? 主要是因为在clone的时候,git会为你默认创建远程代码库origin和master分支,而origin和master就是默认规定的名称而已。 当然我们也可以在user1的基础上添加user2的远程代码库,远程仓库如:https://github.com/user2/repository 执行命令remote add追加 ``` $ git remote add repos2 https://github.com/user2/repository.git ``` 再通过git remote -v查看一下,就有了repos2的fork远程仓库 ``` origin https://github.com/user1/repository.git (fetch) origin https://github.com/user1/repository.git (push) repos2 https://github.com/user2/repository.git (push) repos2 https://github.com/user2/repository.git (push) ``` ## 三、git中的HEAD介绍 1、使用git经常会看到HEAD字样,那么HEAD到底是干什么用的呢? ![](https://box.kancloud.cn/eaf6992b647fc5a1e2cb62fab98e93ae_569x29.jpg) 其实HEAD是一个指针,通常情况下与当前分支等同。 使用命令查看下HEAD文件 ``` cat .git/HEAD ``` ![](https://box.kancloud.cn/58436f19259f70479cbe6ae4251b6fb1_307x33.jpg) 可以看到HEAD指向的refs/heads/electronic_bill_system文件,而这个文件是用来存放40位sha-1的值,也就是提交id。electronic_bill_system是当前分支名。 2、HEAD可以缩写成@ ``` $ git reset HEAD^ ``` ``` $ git reset @^ ``` 3、当HEAD没有指向某个分支,而是指向一个commit,则会形成detached HEAD。 ![](https://box.kancloud.cn/09aa23b026b2d6e7a4786aece3b14241_256x75.png) 可以通过checkout检出c2的提交 ``` $ git checkout 2bc214d ``` 查看 ``` $ git status ``` ![](https://box.kancloud.cn/0978c37fb4d688a860d67a16535c3fd6_339x46.png) 也可以基于个id,创建新分支 ``` $ git branch test 2bc214d ``` ## 四、暂存修改 stash用法 git stash用于将当前工作区的修改暂存起来,就像堆栈一样,可以随时将某一次缓存的修改再重新应用到当前工作区。 1、暂存修改 ``` $ git stash Saved working directory and index state WIP on master: 452b08d rename hello as hello.c ``` 2、弹出修改内容 ``` $ git stash pop Dropped refs/stash@{0} (208ca2e2c0c455da554986a6770a74ad0de5b1e0) ``` 注意:git stash pop 弹出成功后,暂存列表里面就没有了 3、查看暂存列表 ``` $ git stash list stash@{0}: WIP on master: 452b08d rename hello as hello.c stash@{1}: WIP on master: 452b08d rename hello as hello.c ``` 4、暂存多个修改 ``` $ git stash ... $ git stash ... ``` 5、应用某个暂存内容(不会删除暂存记录) ``` $ git stash apply stash@{1} ``` 7、弹出某个暂存内容(会删除暂存记录) ``` $ git stash pop stash@{1} ``` 8、给暂存起别名 ``` $ git stash save "this is func" stash@{0}: On master: this is func stash@{1}: WIP on master: 452b08d rename hello as hello.c ``` 9、删除暂存内容 ``` $ git stash drop <stash@{0}> ``` ## 五、fetch和pull的区别 git fetch:从远程获取最新到本地,不会自动merge,需要对比然后手动合并 ``` $ git fetch origin master:tmp // 从远程仓库master分支获取最新,在本地建立tmp分支 $ git diff tmp // 将当前分支和tmp进行对比 $ git merge tmp // 合并tmp分支到当前分支 ``` git pull:从远程获取最新版本并merge到本地 ``` $ git pull origin master ```