Git命令实战总结

来源:互联网 发布:淘宝4星怎么贷款 编辑:程序博客网 时间:2024/06/04 23:34

$ git config --global uer.name "CareChere"

$ git config --global user.email "xxxxxxxxxxx@qq.com"

cd E:\workspace

$mkdir learnGit

$cd learnGit 

$pwd

$ git init 生成仓库

$ls -ah 显示隐藏的目录

$git add readme.txt

$git commit -m "wrote a readme file"

$git status

$git diff readme.txt

$ git add readme.txt

$git status

$ git commit -m "add distributed"

$git status

$git log

$ git log --pretty=oneline

需要友情提示的是,你看到的一大串类似3628164...882e1e0的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id和我的肯定不一样,以你自己的为准。为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。

$ git reset --hard HEAD^

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

$ cat readme.txt

$git log

最新的那个版本new add已经看不到了!好比你从21世纪坐时光穿梭机来到了19世纪,想再回去已经回不去了,肿么办?

办法其实还是有的,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个append GPLcommit id3628164...,于是就可以指定回到未来的某个版本:

$ git reset --hard 214930

$cat readme.txt

$git reflog 记录每一次命令

$git diff HEAD -- readme.txt 查看工作区和版本库里面最新版本的区别

$git checkout -- readme.txt

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commitgit add时的状态。

git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到到git checkout命令。

$git reset HEAD readme.txt用命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

$rm text.txt

现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit

$git rm text.txt

$git commit -m "remove text.txt" 现在,文件就从版本库中被删除了。

另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:

$git checkout -- text.txt

git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

完全可以自己搭建一台运行Git的服务器,不过现阶段,为了学Git先搭个服务器绝对是小题大作。好在这个世界上有个叫GitHub的神奇的网站,从名字就可以看出,这个网站就是提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库。

在继续阅读后续内容前,请自行注册GitHub账号。由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:

第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

$ssh-keyan -t rsa -C "xxxxxxxxx@qq.com"



学习的是廖雪峰老师的Git教程,http://www.liaoxuefeng.com/ 。

这里整理下学习笔记供自己以后查阅,希望完整学习git的请到上面的网站找Git教程,很好的学习资料。


创建版本库git init


(1) 添加文件到Git仓库

第一步:git add <file> 添加文件到暂存区。

第二步:git commit -m 提交说明 提交到工作区。


(2) 查看Git仓库状态:

git status 查看仓库当前状态

git diff 查看具体修改内容

git log 查看提交日志,加上--pretty=oneline在一行内显示一次提交,加上 --graph可以看到分支图。

git reflog 查看命令历史


(3) 版本回退:

git reset --hard commit_id回退到指定版本

commit_id即指定的版本号,其中HEAD表示当前版本,HEAD^是上一版本,HEAD^^是上上个版本,HEAD~100是往上100个版本。)

 

撤销修改:

1.git checkout --file丢弃某个文件的修改,前提是该文件没添加到暂存区。(git checkout用版本库里的版本替换工作区的版本。可以用于撤销工作区的删除和修改。)

2.要撤销已经添加到缓存区的文件的修改,先git reset HEAD file把暂存区的修改撤销,再用git checkout --file丢弃工作区上文件的修改。

3.对已经提交的修改,直接回退到修改前的版本。


(4) 删除文件:

从版本库删除文件:git rm file删除,并git commit

 

(5) 远程库:

使用Githubgit托管服务:

需要在github账号上创建SSH key,这是因为本地git仓库和Github仓库的文件传输是通过SSH加密的,Github通过SSH公钥识别推送的来源。一个Github账号可以添加多个SSH key,与多台设备协同工作。

 

关联一个远程库:

将本地仓库的内容推送到远程库上。

1. 首先在GitHub账号上创建一个新的仓库。

2. 在本地仓库上用命令:git remote add origin git@server-name:path/repo-name.git

关联远程库。

3. 第一次推送master分支的所有内容:git push -u origin master 

之后的推送:git push origin master

第一次推送会引发SSH警告,只要确定就好了。

 

创建一个远程仓库的正确姿势:

1.在GitHub账号上创建一个新的仓库。

2.克隆远程仓库到本地:git clone git@server-name:path/repo-name.git

这里的地址格式是ssh支持的原生git协议,是比较快的一种。当然我们也可以用https协议。就是git远程仓库在网页上的地址。


(6) 分支的使用:

git branch 查看分支

git branch <name> 创建分支

git checkout <name> 切换分支

git checkout -b <name> 创建+切换分支

git merge <name> 合并某分支到当前分支

git branch -d <name> 删除分支

 

(7) 冲突的解决:

Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

git log --graph命令可以看到分支合并图。

 

合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。


(8) 暂存管理:

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除分支。

当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop(相当于用git stash apply恢复,再用git stash drop来删除),回到工作现场。

git stash list可以用于查看保存的工作现场,可以多次保存,当需要恢复的时候,需要指定恢复的stash,命令如: git stash apply stash@{0}

 

开发一个新功能,最好新建一个分支。如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。

 

(9) 向远程库推送文件:

git remote -v 查看远程库信息。

git push origin branch-name 从本地推送分支,如果推送失败,先用git pull抓取远程的新提交,然后,在本地合并,解决冲突,再推送。

git checkout -b branch-name origin/branch-name 在本地创建和远程分支对应的分支,本地和远程分支的名称最好一致。

git branch --set-upstream branch-name origin/branch-name建立本地分支和远程分支的关联。


(10) 标签管理:

创建标签:

git tag <name> [commit_id] 新建一个标签,默认为HEAD,也可以指定一个commit id

git tag -a <tagname> -m "说明信息" 指定标签信息;

git tag -s <tagname> -m "说明信息" 用PGP签名标签;

git tag 查看所有标签。

git push origin <tagname> 推送一个本地标签;

git push origin --tags 推送全部未推送过的本地标签;

删除标签:

git tag -d <tagname> 删除一个本地标签;

git push origin :refs/tags/<tagname> 删除一个远程标签。

 

(11) 使用GitHub为别人的开源库贡献代码:

GitHub上,可以任意Fork开源仓库;

自己拥有Fork后的仓库的读写权限;

3可以推送pull request给官方仓库来贡献代码。

 

(12) 忽略特殊文件:

忽略某些文件时,需要编写.gitignore.

.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理。




0 0