Git常用操作
2016-05-17 00:24
429 查看
Git常用操作
文档时间:2016年05月14日23:58:29提交新文件
第一步添加文件:git add readme.txt //文件必须在git的仓库目下
第二步提交变动:git commit readme.txt //或者 git commit readme.txt -m “添加readme.txt文件,这里必须写入说明”
提交修改
git status命令查看仓库当前的状态
位于分支 master
尚未暂存以备提交的变更:
(使用 “git add <文件>…” 更新要提交的内容)
(使用 “git checkout – <文件>…” 丢弃工作区的改动)
修改: readme.txt
修改尚未加入提交(使用 “git add” 和/或 “git commit -a”)
git diff查看difference
$ git diff
diff –git a/readme.txt b/readme.txt
index 9bb4dfe..981a41b 100644
— a/readme.txt
+++ b/readme.txt
@@ -1 +1,2 @@
My first git file
+这里是第一次修改
git add ×× 命令添加文件至仓库,git status查看状态
$ git status
位于分支 master
尚未暂存以备提交的变更:
(使用 “git add <文件>…” 更新要提交的内容)
(使用 “git checkout – <文件>…” 丢弃工作区的改动)
修改: readme.txt
修改尚未加入提交(使用 “git add” 和/或 “git commit -a”)
git commit ×× -m “说明” 将文件提交。git status 查看仓库的当前状态
$ git status
位于分支 master
无文件要提交,干净的工作区
git 回到历史版本
git log 查看记录
$ git log
commit 1c71f838147fe1ccba9d271b6e887d69e1953150
Author: adaivskenan adaivskenan@foxmail.com
Date: Sun May 15 09:33:08 2016 +0800
第二次修改
commit cdd599457423fa678fbbafad3fafc78dc827b0da
Author: adaivskenan adaivskenan@foxmail.com
Date: Sun May 15 00:46:59 2016 +0800
添加改动
commit bbd0121be8fab4cfbe49554bc65ffa732ffa9796
Author: adaivskenan adaivskenan@foxmail.com
Date: Sun May 15 00:06:23 2016 +0800
提交了我的第一个readme,这里是本次提交的说明
查看可以加参数
$ git log –pretty=oneline
1c71f838147fe1ccba9d271b6e887d69e1953150 第二次修改
cdd599457423fa678fbbafad3fafc78dc827b0da 添加改动
bbd0121be8fab4cfbe49554bc65ffa732ffa9796 提交了我的第一个readme,这里是本次提交的说明
git reset –hard HEAD^ 用来回到上一个版本
gitreset–hardHEADHEAD现在位于cdd5994添加改动 git log –pretty=oneline
cdd599457423fa678fbbafad3fafc78dc827b0da 添加改动
bbd0121be8fab4cfbe49554bc65ffa732ffa9796 提交了我的第一个readme,这里是本次提交的说明
git 重返未来
git reflog 查看命令历史
$ git reflog
cdd5994 HEAD@{0}: reset: moving to HEAD^
1c71f83 HEAD@{1}: reset: moving to 1c71f83
cdd5994 HEAD@{2}: reset: moving to HEAD^
1c71f83 HEAD@{3}: commit: 第二次修改
cdd5994 HEAD@{4}: commit: 添加改动
bbd0121 HEAD@{5}: commit (initial): 提交了我的第一个readme,这里是本次提交的说明
git reset –hard commit_id 回到未来
gitreset–hard1c71f83HEAD现在位于1c71f83第二次修改 git log –pretty=oneline
1c71f838147fe1ccba9d271b6e887d69e1953150 第二次修改
cdd599457423fa678fbbafad3fafc78dc827b0da 添加改动
bbd0121be8fab4cfbe49554bc65ffa732ffa9796 提交了我的第一个readme,这里是本次提交的说明
撤销文件
撤销工作区文件
$ cat readme.txt
My first git file
这里是第一\这是第二次修改加入中间\次修改
add操作
add后添加
$ vi readme.txt
$ cat readme.txt
My first git file
这里是第一\这是第二次修改加入中间\次修改
add操作
add后添加
林俊杰JJ
$ git checkout – readme.txt
$ cat readme.txt
My first git file
这里是第一\这是第二次修改加入中间\次修改
add操作
add后添加
撤销缓存区文件
$ cat readme.txt
My first git file
这里是第一\这是第二次修改加入中间\次修改
add操作
add后添加
JJ 林俊杰
$ git status可以看到此时文件在暂存区
位于分支 master
要提交的变更:
(使用 “git reset HEAD <文件>…” 以取消暂存)
修改: readme.txt
$ git reset HEAD readme.txt //重置暂存区
重置后取消暂存的变更:
M readme.txt
$ cat readme.txt //工作区此时并未改变
My first git file
这里是第一\这是第二次修改加入中间\次修改
add操作
add后添加
JJ 林俊杰
$ git status
位于分支 master
尚未暂存以备提交的变更:
(使用 “git add <文件>…” 更新要提交的内容)
(使用 “git checkout – <文件>…” 丢弃工作区的改动)
修改: readme.txt
修改尚未加入提交(使用 “git add” 和/或 “git commit -a”)
$ git checkout – readme.txt //丢弃工作区的改动
$ git status //此时文件以恢复HEAD的版本
位于分支 master
无文件要提交,干净的工作区
$ cat readme.txt
My first git file
这里是第一\这是第二次修改加入中间\次修改
add操作
add后添
撤销版本库文件(没有进行push到远程库的操作)
参考git 回到历史版本,先将HEAD指向历史版本
删除文件
文件add到暂存后删除工作区文件
$ la
.git readme.txt test.txt
$ git add test.txt
$ git status
位于分支 master
要提交的变更:
(使用 “git reset HEAD <文件>…” 以取消暂存)
新文件: test.txt
$ rm test.txt
$ git status
位于分支 master
要提交的变更:
(使用 “git reset HEAD <文件>…” 以取消暂存)
新文件: test.txt
尚未暂存以备提交的变更:
(使用 “git add/rm <文件>…” 更新要提交的内容)
(使用 “git checkout – <文件>…” 丢弃工作区的改动)
删除: test.txt
$ git rm test.txt
rm ‘test.txt’
$ git status
位于分支 master
无文件要提交,干净的工作区
文件commit到版本库后删除工作区文件
$ la
.git readme.txt test.txt
$ rm test.txt
$ git status
位于分支 master
尚未暂存以备提交的变更:
(使用 “git add/rm <文件>…” 更新要提交的内容)
(使用 “git checkout – <文件>…” 丢弃工作区的改动)
删除: test.txt
修改尚未加入提交(使用 “git add” 和/或 “git commit -a”)
$ git rm test.txt
rm ‘test.txt’
$ la
.git readme.txt
$ git status
位于分支 master
要提交的变更:
(使用 “git reset HEAD <文件>…” 以取消暂存)
删除: test.txt
$ git commit -m “remove text.txt”
[master bcfd14e] remove text.txt
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 test.txt
远程仓库
SSH Key
SSH Key为非对称加密的方式,及包含公钥和密钥。公钥存放在git远程服务器,用于校验是否是合法的用户在提交代码。密钥存放在本地,用于解密服务器端传送的数据。
SSH文件在用户的主目录中,我的SSH地址为/home/adaivskenan/.ssh。里面有id_rsa和id_rsa.pub两个文件,id_rsa为私钥,id_rsa.pub为公钥。如果没有需要用命令生成:
$ ssh-keygen -t rsa -C “youremail@example.com
输入命令后不需要其它输入,一直Enter就可以
添加远程仓库
git remote add origin git@github.com:adaivskenan/com.alex.qin.wechat.git
git push -u origin maste
推送本地库的内容推送到远程。由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令
关联后,只要本地做了修改,就可以通过命令将master分支的最新修改推送至远程的github
$ git push origin master
从远程库克隆
git clone git@github.com:adaivskenan/com.alex.qin.wechat.git
分支管理
创建分支
每次提交master都会向前移动。HEAD并不是指向提交,而是指向master,再由master指向提交。因此HEAD表示当前分支。
新建分支dev,将HEAD指向dev则代表当前分支为dev。
$ git checkout -b dev
切换到一个新分支 ‘dev’
上面的命令分解为两条命令即:
$ git branch dev1
$ git checkout dev1
切换到分支 ‘dev1’
查看当前分支
$ git branch
合并分支
在dev分支上进行开发,commit后dev指向新节点,master并不变
dev开发完毕切换为master
git checkout master
假如我们在dev上的工作完成了,就可以把dev合并到master上。直接把master指向dev的当前提交,就完成了合并:
$ git merge dev
git merge命令用于合并指定分支到当前分支。
如果将dev删除则又恢复只有master
$ git branch -d dev
3.解决冲突
假设现在存在master和dev两个分支。dev对readme.txt进行修改后commit。master同时也修改了readme.txt。在dev完成修改需要与master合并的时候出现了conflict。
$ git merge dev
自动合并 readme.txt
冲突(内容):合并冲突于 readme.txt
自动合并失败,修正冲突然后提交修正的结果
手动修改master后继续commit便可以,dev则可以删除。因为merge的时候dev的内容以及合并到了master中,修改master后只需提交master即可。
$ git branch -d feature1
注意事项:
git分支没有主次之分,master叫主分支其实和别的分支完全一样知识记录:
git status查看哪些文件被修改过git diff可以查看修改内容
HEAD指向的版本就是当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,往上100个版HEAD~10
用git log可以查看提交历史,以便确定要回退到哪个版本
git reflog查看命令历史,以便确定要回到未来的哪个版本
git reset –hard commit_id 用来切换版本
git checkout – file 接丢弃工作区的修改时,将版本库的文件直接取出来,本质就是用版本库中的文件替换工作区的文件
git reset HEAD file 将暂存区的文件丢弃,然后可以进行 git checkout – file的操作,即可以撤销add操作后的修改
git rm用于删除一个文件,与git add一样将此更新到暂存区,都需要进行git commit的操作,将暂存区合并至版本库
查看分支:git branch
创建分支:git branch
切换分支:git checkout
创建+切换分支:git checkout -b
合并某分支到当前分支:git merge
删除分支:git branch -d
git remote add origin git@server-name:path/repo-name.git:关联一个远程库
git push -u origin master 关联后,使用命令第一次推送master分支的所有内容
git push origin master 每次本地提交后,只要有必要,就可以使用命令推送最新修改
Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。
git log –graph –pretty=oneline –abbrev-commit 可以看到分支合并图
相关文章推荐
- RPC failed; result=22, HTTP code = 411
- git更新已經刪除的文件
- 提取Git每次提交后Commit的文件
- GIT迁移服务器
- 分布式版本管理git入门指南使用资料汇总及文章推荐
- git终极指南:在实际开发中的应用
- Git远程操作详解
- 25个 Git 进阶技巧(翻译)
- 详解版本控制利器Git,SVN的异同以及适用范围
- Ruby实现的删除已经合并的git分支脚本分享
- 在 Shell 提示符中显示 Git 分支名称的方法
- Git使用基础篇(一些常用命令和原理)
- git eclipse 插件的安装
- git fork同步是什么意思?
- Git使用小坑 Out of memory错误的解决方法
- Python的高级Git库 Gittle
- 使用GIT进行源码管理――GUI客户端小结
- 使用git代替FTP部署代码到服务器的例子
- linux系统安装git及git常用命令
- 分享下自己总结的Git常用命令