【转载请注明出处!http://my.oschina.net/u/2337744/】
Git教程
前面已经介绍了Git的安装与用户的初始配置,接下来是Git的基本命令与代码上传。
【mkdir 文件夹名称】命令:在当前目录下创建一个指定名称的文件夹。
【cd 跳转的目录名称】命令:跳转到指定的目录下,可以使用相对路径和绝对路径。
【pwd】命令:显示当前目录。
由于使用Windows系统,为了避免遇到各种莫名其妙的问题,要确保目录名(包括父目录)不包含中文。
【git init】命令:在当前目录下创建一个版本库。
【ls –ah / ls -a】命令:显示当前目录下的所有目录和文件【包括以’.’开头的隐藏目录和隐藏文件】
【git status】命令:查看当前git仓库的状态。
【git add 文件名称(多个文件用空格隔开)】命令:往版本库的暂存区中添加纯文本文件。
【git add】命令允许多次添加,例如:
· | git add file1.txt
· | git add file2.txt file3.txt
· | git commit –m “commit 3 files to repository!”
· | 以上三条命令将file1,file2,file3提交到git仓库中。
【cat 当前目录下的某个文本文件】命令:显示指定文本文件的内容。
【git commit –m “注释信息”】命令:将暂存区中的文件提交到版本库中。
【git diff 文件名称】命令:通过git status命令发现未提交的已修改文件之后,可以利用git diff命令查看该文件的内容发生了什么改变。Git Bash会显示改变的内容与之前的内容。
【git log】命令:查看版本库中的详细提交日志【日志包括作者,提交日期,提交注释和commit id】。
【git log --pretty=oneline】命令:查看版本库中日志且一行输出一个版本信息【信息包括commit id和提交注释】。
【git reset --hard版本指定】命令:将已经提交的文件回溯到指定的版本,其中”版本指定”通过HEAD(当前的版本,与commit id版本号一定可以指定版本)来指定。HEAD^是上一个版本,HEAD^^是上上一个版本,如果是上100个版本则通过HEAD~100来完成。
【git reset --hard 版本号commit id】命令:通过指定确定的版本号来回溯到之前或者之后的版本。
【git reflog】命令:显示所有版本号日志,包括过去的版本和未来的版本。
【git reset HEAD 文件名称】命令:重写暂存区的目录树(包括文件),它将被master分支指向的目录树(包括文件)所替换,但是工作区不受影响。
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
【git checkout - 文件名称】命令:用当前暂存区的文件覆盖工作区的文件。
【git checkout .】命令:用当前暂存区的全部文件覆盖工作区的同名文件。通常命令后面加上一点而不是指定某一文件时,,命令表示对所有文件进行相同操作。
【rm 文件名称】命令:删除当前工作区的指定文件。
【git rm 文件名称】命令:删除当前暂存区中的指定文件并且删除工作区中的相同文件。
【git rm --cache 文件名称】命令:删除当前暂存区中的指定文件。
【cd ~/.ssh】命令:如果存在ssh目录/文件则跳转到该目录下,如果找不到该目录则显示不存在该目录文件。
【ssh-keygen –t ras –C “邮箱地址”】命令:生成SSH密钥对(公钥和密钥)。具体指令信息在Git Bash中会有提示。
【git remote –v】命令:罗列已经添加的远程库的名称和远程库的URL。
【git remote add 远程库名称 远程库URL】命令:本地仓库添加远程仓库,一般远程仓库名称使用origin,远程库URL选择SSH类型。
【git pull 远程主机名称 远程分支名称:本地分支名称】命令:本地仓库同步(拉取更合适)远程仓库的信息,将远程分支信息拉取到本地分支里。
【git push 远程主机名称 本地分支名称:远程分支名称】命令:将本地仓库的指定分支推送到远程仓库的指定分支里。
【git pull/push 远程主机名称 源分支名称:目的分支名称】git pull/push命令格式。
【注意:第一次本地仓库和远程仓库的通信必须先拉取远程仓库信息之后才可以推送本地仓库信息,这是为了避免远程仓库已有信息与本地仓库信息不对称的冲突】
【git clone SSH类型远程URL】命令:将远程仓库给克隆到本地仓库中。
【rm –rf 本地仓库的绝对地址】命令:删除指定路径的git仓库,这条命令执行之后可以删除该仓库所在的目录。
【git branch】命令:罗列当前的所有分支,并在当前分支前面追加*号以区别其他分支。
【git branch 分支名称】命令:创建一个新的分支。
【git checkout 分支名称】命令:切换到指定分支。
【git checkout –b 分支名称】命令:创建并切换到新分支。
【git merge 分支名称】命令:合并指定分支到当前分支。使用的是默认的快进式(fast forwarding)合并分支方式,它直接将当前分支的指针覆盖掉指定分支的指针,这时指定分支的指针就消失了。
【git branch –d 分支名称】命令:删除指定分支。
【vi 文件名称】命令:新建或者打开指定文件。
按一下Insert键进入编辑模式,编辑完毕之后可以保存并退出,此时光标移动到文末,按一下Esc键,然后切换到大写字母,连续输入ZZ两次就可以保存并退出;如果只想退出并且不保存当前的编辑,同样需要文末按下Esc键,然后输入“:”号。之后进入命令行模式,输入q!退出文本编辑。
【git log –graph –pretty=oneline –abbrev-commit】命令:图形方式显示git的分支开展情况。
【git merge --no-ff -m “注释” 分支名称】命令:使用no-ff(no fastforwarding)参数合并指定分支到当前分支。使用非快进式合并分支方式,它直接将当前分支的指针移动到指定分支处,此时指定分支和当前分支的指针都指向同一处。
【git stash】命令:将当前的工作区储存起来,储存的地方暂时就叫做储存域,储存的当前工作区称为储存区。
【git stash list】命令:查看当前储存域的所有储存工作区。
【git stash apply 储存区号stash@{XXX号}】命令:将指定储存区XXX给恢复到当前工作区,此时储存域中依然含有该条储存区信息。
【git stash drop 储存区号stash@{XXX号}】命令:将指定储存区XXX从储存域中删除。
【git stash pop储存区号stash@{XXX号}】命令;将指定储存区XXX从储存域中恢复到当前工作区并且将它从储存域中删除。
【git stash clear】命令:清空储存域。
【git branch –D 分支名称】命令;用于强行删除未合并到主分支的分支。
【git branch -a】命令:显示所有本地/远程分支以及当前本地/远程分支所指向的分支。
【git branch –r】命令:显示所有远程分支以及当前远程分支所指向的分支。
【git checkout –b 本地新建分支名称 origin/远程分支名称】命令:将指定远程分支创建到本地仓库指定分支(原本本地没有该指定分支)中。
【git branch –set-upstream 本地分支名称 origin/远程分支名称】命令:将本地分支与远程分支连接起来。
【git tag tag名称】命令:往当前分支的当前版本号commit id中添加标签tag。
【git tag tag名称 版本号commit id】命令:往指定版本号commit id中添加标签tag。
【git tag】命令:显示所有标签信息。
【git tag –a 名称 –m “注释” commit id】命令:往指定版本号commit id中添加标签tag,并给tag添加注释。
【git show tag名称】命令:显示指定tag的详细内容。
【git tag –d tag名称】命令:删除本地的标签。
【git push origin :refs/tags/标签名称】命令:可以删除一个远程标签。
【git push origin tag名称】命令:推送一个本地标签。
【git push origin --tags】命令:推送全部未推送的本地标签。
【git log -1】命令:显示最近一次提交的内容。
【本地删除远程文件夹/文件】
【第零步:查看】【git rm –r –n –cached 文件夹名称/文件名称】命令:罗列指定远程文件夹的所有文件/文件,用来查看即将被删除的文件信息;
【第一步:删除】【git rm –r –cached 文件夹名称/文件名称】命令:删除指定远程文件夹的所有文件/文件;
【第二步:提交】【git commit –m “注释”】命令:提交删除到本地仓库;
【第三步:推送】【git push 远程主机名称 本地分支名称:远程分支名称】命令:推送到远程主机。
【配置别名】
【git config --global alias.别名 “固定的命令片段”】命令:为指定的命令片段起别名。
例如:git config --global alias.ci ‘commit –m’将commit –m起别名为ci;
git config –global alias.br ‘branch’将branch起别名为br。
【别名的信息存储在.git/config配置文件的[alias]后面,如果想要取消该别名,只要直接将它从[alias]后面删除就可以了】
【附】通常开发新功能是通过新建一个feature分支来实现的,最后完成之后就将这个分支给合并到主分支并删除掉。
【专有名词:repository 版本库】
【专有名词:working directory工作区】
【专有名词:stage/index暂存区,目录中显示暂存区为index,Git Bash显示暂存区为stage】
▓▏创建版本库▕▓:
第一步:创建空目录
首先是找到一个合适的地方,创建一个空目录;
第二步:创建Git仓库
通过git init命令在这个目录创建Git可以管理的仓库【empty Git repository】;
此时当前目录下多了一个.git目录,该目录是Git用来跟踪管理版本库的,没事千万不要手动修改里面的文件,随便修改容易破坏Git仓库。
也不一定必须在空目录下创建Git仓库,选择一个已经有东西的目录也是可以的。不过,不建议你使用自己正在开发的项目来学习Git,否则造成的一切后果概不负责。
第三步:把文件添加到版本库
首先要明确的是,所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。
不幸的是,Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的,前面我们举的例子只是为了演示,如果要真正使用版本控制系统,就要以纯文本方式编写文件。
因为文本是有编码的,比如中文有常用的GBK编码,日文有Shift_JIS编码,如果没有历史遗留问题,强烈建议使用标准的UTF-8编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持。
▓▏往版本库中添加文件▕▓:
第一步:新建文本文件
在工作区(或者它的子目录)下建立纯文本文件”readme.txt”,
第二步:将readme.txt添加到git中
查看当前的git状态,提示untracked files有readme.txt文件,这时就可以将该文件添加到index暂存区中了,直接使用git add “纯文本文件名称”命令可以完成该操作;查看git状态,提示有待提交文件在暂存区中,通过使用git commit –m “注释”命令将暂存区中的所有文件提交到git上面,最后是查看git状态,提示该分支没有文件待提交且工作区为空。
▓▏版本更替▕▓:
第一步:修改readme.txt文件
第二步:提交修改过后的readme.txt到git仓库中
先用git status查看git仓库状态,然后利用git diff查看与之前版本的差异,明确差异之后确定是否将该文件提交到git仓库中。明确要提交之后先将文件提交到index暂存区中,再次查看git仓库状态并提交暂存区的文件到git仓库中,最后再查看一次git仓库状态。
▓▏追溯版本▕▓:
第一步:再次修改文件并提交到git版本库中
然后通过git add命令和git commit命令将修改过的readme.txt文件提交到git版本库中。我们不断地修改文件并提交到版本库中,Git会不断地保存commit(可以看做是一个快照),一旦把文件误删了或者改乱了,我们可以从最近的一个commit中恢复文件并继续工作。
第二步:将readme.txt回溯到第二版本
首先利用git log命令或者 git log --pretty=oneline命令得到各版本的具体信息,其中会有一串长长的字符串是16进制的commit id,它是每个版本的版本号。【也可以通过Git GUI来查看版本历史】
然后通过git reset --hard命令来回溯,其中--hard参数如果是HEAD类型则只能回溯到之前的版本,而如果是指定版本号commit id的话那就可以回溯到某个未来的版本。版本号不用写全,前几位就可以了,Git会自动去匹配。
commit id可以通过git reflog命令来获取,然后再通过git reset --hard commit id就可以回溯到未来的版本了。
来源:oschina
链接:https://my.oschina.net/u/2337744/blog/633243