2016-04-23/19:25:02
参考:http://blog.jobbole.com/78960/
Git bash中运行git log之后怎样终止这个命令,按q,再按回车键
清屏 clear
查询用户名
$ git config --global user.name
查询用户邮箱
$ git config --global user.email
创建文件夹 mkdir
显示当前的目录 pwd
git init 初始化仓库,多了个.git文件夹。该文件夹是隐藏的。
$ git add text1.txt ,添加文件到“暂存区”
$ git commit -m "text1 第一次提交" ,把文件提交到“仓库”,并添加提交信息
$ git status ,查看提交状态
接着向文件text1.txt添加一行文字,再次查询$ git status会提醒文件没有提交
$ git diff text1.txt ,查看修改了什么内容。
每次修改文件,都要add和commit一次。
$ git log ,查看历史提交。
$ git log --pretty=oneline,简化历史提交信息。带有commit的信息。
$ git reset --hard HEAD^,回退到上一个版本。
回退到上上个版本只需把HEAD^ 改成 HEAD^^ 以此类推
回退到前100个版本的话git reset –hard HEAD~100 即可
$ cat text1.txt,查看浏览内容
$ git reflog,查看所有修改信息。
$ git reset --hard 18d3d6a,git reset --hard 版本号,回退到最新的版本
------------------------------
理解工作区与暂存区的区别?
工作区:就是你在电脑上看到的目录
版本库(Repository):工作区有一个隐藏目录.git,这个不属于工作区,这是版本库。
版本库里面存了很多东西,其中最重要的就是stage(暂存区),还有Git为我们自动创建
了第一个分支master,以及指向master的一个指针HEAD。
我们前面说过使用Git提交文件到版本库有两步:
第一步:是使用 git add 把文件添加进去,实际上就是把文件添加到暂存区。
第二步:使用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支上。
———————————————
Git撤销修改和删除文件操作。
未提交之前:
方法一:直接手动修改文件,然后add,commit掉
方法二:$ git reset --hard HEAD^,回退上一个版本
方法三:git status会提示,
(use "git checkout -- <file>..." to discard changes in working directory)
即:把text1.txt文件在工作区做的修改全部撤销。
命令如下:$ git checkout -- text1.txt
这里有2种情况,如下:
1·readme.txt自动修改后,还没有放到暂存区,使用 撤销修改就回到和版本库一模一样的状态。
2·另外一种是readme.txt已经放入暂存区了,接着又作了修改,撤销修改就回到添加暂存区后的状态。
对于第二种情况,
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: text1.txt
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: text1.txt
使用,$ git checkout -- text1.txt,就可以回到之前。
注意:命令git checkout — readme.txt 中的 — 很重要,如果没有 — 的话,那么命令变成创建分支了。
——————————————————
删除文件:
$ rm b.txt
删除一个文件,必须先staged
(use "git add/rm <file>..." to update what will be committed),然后在commit掉。
只要没有commit之前,如果我想在版本库中恢复此文件如何操作呢?
可以使用如下命令 git checkout — b.txt,
————————
远程仓库:
第一步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果有的话,直接跳过此如下命令,如果没有的话,打开命令行,输入如下命令:
$ ssh-keygen -t rsa -C "[email protected]"
密码为空。
id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
验证绑定状态:
$ ssh -T [email protected]
The authenticity of host ‘github.com (192.30.252.128)‘ can‘t be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘github.com,192.30.252.128‘ (RSA) to the list of known hosts.
Hi sym1120! You‘ve successfully authenticated, but GitHub does not provide shell access.
————————————————————
将本地repo推送到github上面。先有本地库,后有远程库时候,如何关联远程库。
git remote add origin https://github.com/sym1120/test3.git
git push -u origin master
会提示输入用户名和密码。
——————————————————
$ git remote add origin https://github.com/sym1120/test3.git
fatal: remote origin already exists.
$ git push -u origin master
Counting objects: 18, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (11/11), done.
Writing objects: 100% (18/18), 1.51 KiB | 0 bytes/s, done.
Total 18 (delta 1), reused 0 (delta 0)
To https://github.com/sym1120/test3.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
从现在起,只要本地作了提交,就可以通过如下命令:
$ git push origin master
把本地master分支的最新修改推送到github上了,现在你就拥有了真正的分布式版本库了。
————————————————————————————
2. 如何从远程库克隆?
上面我们了解了先有本地库,后有远程库时候,如何关联远程库。
现在我们想,假如远程库有新的内容了,我想克隆到本地来 如何克隆呢?
选择一个目录,选择要克隆的项目的地址;
$ git clone https://github.com/sym1120/qqqq
Cloning into ‘qqqq‘...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
Checking connectivity... done.
————————————
创建与合并分支:
在版本回填退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。
$ git checkout -b dev,表示创建并切换,相当于如下2条命令
git branch dev 创建dev分支。
git branch 查看当前分支
git checkout dev切换分支
合并分支:
$ git merge dev
Updating 723f293..a57b9ba
Fast-forward
text1.txt | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
删除分支:
$ git branch -d dev
Deleted branch dev (was a57b9ba).
_________________________
分支管理策略。
通常合并分支时,git一般使用”Fast forward”模式,在这种模式下,删除分支后,会丢掉分支信息,现在我们来使用带参数 –no-ff来禁用”Fast forward”模式。
$ git merge --no-ff -m "merge with no-ff" dev
$ git branch -d dev
Deleted branch dev (was d17856f).
再次查询分支信息
$ git log --graph --pretty=oneline --abbrev-commit
* 1e94401 merge with no-ff
|\
| * d17856f dev add 1111111111111111
|/
* 78f1a08 fix conflicts
|\
| * b1045bc fenzhi add 99999999
* | 9cd6034 master add 999999999
|/
* a57b9ba dev add 88888
* 723f293 text fix finally
|\
| * 8cbe83c fix sencond
* | ce3d4fb fix
* | c79faa0 wwwwwwwwwwwwwwww
|\ \
| |/
| * 698a974 dev add 77777
* | afdee18 test
|/
* b963e81 change txt
* 424cce8 b.txt test
* 0273164 first add b.txt
* 4757d5e 最后一次修改text1.txt
* 4595644 一次性提交所有文件
* 18d3d6a 第三次修改文件
* 6e7d069 text1.txt添加一行22222的内容
* 06daaa0 text1 第一次提交
分支策略:首先master主分支应该是非常稳定的,也就是用来发布新版本,一般情况下不允许在上面干活,干活一般情况下在新建的dev分支上干活,干完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。
————————
bug分支:
在开发中,会经常碰到bug问题,那么有了bug就需要修复,在Git中,分支是很强大的,每个bug都可以通过一个临时分支来修复,修复完成后,合并分支,然后将临时的分支删除掉。
Git还提供了一个stash功能,可以把当前工作现场 ”隐藏起来”,等以后恢复现场后继续工作。