git命令使用方法git安装包
http://c35.yunpan.360.cn/my/?sid=#/安装包/Git安装/
git安装时秘钥生成步骤
1. git config --global user.name xxx
2. git config --global user.email xxx@xxx
3. ssh-keygen -C xxx@xxx -t rsa//第3步分为下面3个小步骤
(1)公钥保存地址 按回车选择默认
(2)私钥密码-为了后续使用方便 设置为空
(3)生成公钥和私钥identification has been saved in /c/Users/xxx/.ssh/id_rsa.public key has been saved in /c/Users/xxx/.ssh/id_rsa.pub.// git公钥------/c/Users/xxx/.ssh/id_rsa.pub.文件中的内容
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/pYFUKMZUPNJtjOdSQl74GH4JxAQ8F+EqaMoR9Yw+5VNW81eWrrbbSsjpEDPaZIbb0Sc89oJ4Uzi2lpHjhTujMmdzf2TrfOaGRa2+M5Ey4Z1MXuT4RVawrZ/PtK7tTI+eMKc/NZqhcp9e+NYIVzbwUMqvAnx+OTgDF3RYmYWDcbvTX0AybOBd/NwV1BtR5PkPRHlGQN0Oi5wHmvXmP9WIQ9dAoi+w63mhL+c8a8Qu+PBZBiknzJRB1p9dtIOEPdq5ltGAqluEZ0FTEzet1qH0pAUaOxxEsZAhGpa9453rQJ433Emg7hy30KomOQvFp64T6QlTGFKIg9EMm9t8Ny2r xxx@xxxgit推荐使用SSH协议的原因使用SSH协议可以避免每次push输入密码。前提是在账户里配置好SSH秘钥。 git@github.com开头的就是SSH协议。 使用Https协议则会导致每次都会输入用户名和密码。
git bash命令窗口和字体的大小设置
鼠标点击git bash界面的标题栏,鼠标右键选择
// 窗口尺寸设置
options --> windows -->修改行数(高度)+列数(宽度)
// 窗口字体设置
options --> text -->设置字体大小
// 别的设置可参考此文
http://my.oschina.net/lieefu/blog/476252
// 解决gitk在Windows下的中文乱码问题
http://howiefh.github.io/2014/10/11/git-encoding/
// 顺带了解一下win7的命令窗口设置
http://article.pchome.net/content-1245289-all.html
创建本地库
// 从零开始创建1.git init 创建一个空的Git库。在当前目录中产生一个.git 的子目录。以后,所有的文件变化信息都会保存到这个目录下
2.git init --bare 创建备份仓库(在服务器或者工程目录以外路径都可以创建的备份仓库)// 克隆已有仓库创建
git clone /path/to/repository // 本地库
git clone git/ssh/http[s]/ftp[s]/file/rsync:username@ip/path/to/repository // 远端服务器
git clone的本质就是把“Git目录”里面的内容拷贝过来,一般的“Git目录”里有成千上万的各种对象(提交对象,树对象,二进制对象, tag对象......),如果逐一复制的话,其效率就可想而知。
如果通过git、ssh协议传输,服务器端会在传输前把需要传输的各种对象先打好包再进行传输;而http(s)协议则会反复请求要传输的不同对象。如果仓库里面的提交不多的话,前者和后者的效率相差不多;但是若仓库里有很多提交的话,git、ssh协议进行传输则会更有效率。不过现在Git对http(s)协议传输Git仓库做了一定的优化,http(s)传输现在也能达到ssh协议的效率
.git目录的组成COMMIT_EDITMSG # 保存着上一次提交时的注释信息
config # 项目的配置信息
description # 项目的描述信息
HEAD # 项目当前在哪个分支的信息index # 索引文件,git add之后要添加的内容暂存在这里
hooks/ # 默认的“hooks” 脚本文件
info/ # 里面有一个exclude文件,指定本项目要忽略的文件 #,看一下这里
logs/ # 各个refs的历史信息
objects/ # 这个目录非常重要,里面存储都是Git的数据对象
# 包括:提交(commits), 树对象(trees),二进制对象 #(blobs),标签对象(tags)。 # 在objects目录下,SHA串的前两个字符作为目录名,后面的38个字符作为文件名
refs/ # 标识着你的每个分支指向哪个提交(commit)。
// 查看提交文件的内容,2d832d是SHA(安全hash算法)签名值
$ git cat-file -p 2d832d
// 详细请参考 本地仓库的创建和构成
http://www.infoq.com/cn/news/2011/02/git-adventures-local-repository
工作流
本地和远程工作流
你的本地代码 由 git 维护的三棵“树”组成。第一个是你的 工作目录,它持有实际文件;第二个是 缓存区(Index/stage),它像个缓存区域,临时保存你的改动;最后是本地仓库( HEAD),指向你最近一次提交后的结果。
git clone 用于建立本地仓库 // origin 是git clone默认使用的远程主机名
通过git clone获取远端git库后,.git/config中的开发者信息不会被一起clone过来。仍然需要为本地库的.git/config文件添加开发者信息。此外,开发者还需要自己添加 . gitignore文件。 通过git clone获取的远端git库,只包含了远端git库的当前工作分支。如果想获取其它分支信息,需要使用 “git branch –r” 来查看, 如果需要将远程的其它分支代码也获取过来,可以使用命令 “ git checkout -b 本地分支名 远程分支名”,其中,远程分支名为 “git branch –r” 所列出的分支名, 一般是诸如“origin/分支名”的样子。如果本地分支名已经存在, 则不需要“-b”参数。
git fetch 从远程获取最新版本到本地,不会自动merge,比git pull更安全些。 如果先使用 git fetch ,再使用git checkout nov/eclair_rocket,则是先从服务器上获取最新的更新信息,然后从服务器上下载最新的代码。git pull 从服务器的仓库中获取代码,和本地代码合并。等同于: Git fetch + Git merge这条命令将从远端git库的远端分支名获取到本地git库的一个本地分支中。其中,如果不写本地分支名,则默认pull到本地当前分支。 如果你的本地分支已经有内容,则git pull会合并这些文件,如果有冲突会报警。 git pull和git push是针对所有分支进行的操作。也就是说即使我切换到一个次分支alpha, 如果这个分支和远端的分支已关联了的话,那么执行git pull会把master分支和alpha分支都更新到远端。
git命令行使用
添加与提交
你可以计划改动(把它们添加到缓存区),使用如下命令:
git add dir1 # 添加dir1这个目录,目录下的所有文件都被加入
git add f1 f2 # 添加f1,f2文件
git add . #将本地所有的(新增和修改,没有删除)文件添加到暂存区
git add -u #将本地的(修改和删除,没有新增)文件添加到暂存区
git add -A/* #添加当前目录下的所有文件
#git add -A = git add . + git add -u
git add . #添加当前目录下的所有文件和子目录
git rm --cache a.c #删除已提交到本地仓库的文件
这是 git 基本工作流程的第一步;使用如下命令以实际提交改动:
git commit -m "代码提交信息"
git commit -a -m "代码提交信息" # git commit -a是把unstaged的文件变成staged(这里不包括新建(untracked)的文件),然后commit
git commit --amend # 修改提交的commit(没有push)
git commit --amend -m "comment" # 修改commit注解
现在,你的改动已经提交到了 HEAD,但是还没到你的远端仓库。
推送改动
你的改动现在已经在本地仓库的 HEAD 中了。执行如下命令以将这些改动提交到远端仓库:
git push origin mastergit push不会自动合并文件。因此,如果git push时,发生了冲突,就会被后push的文件内容强行覆盖,而且没有什么提示。 这在合作开发时是很危险的事情。
可以把master换成你想要推送的任何分支。
如果你还没有克隆现有仓库,并欲将你的仓库连接到某个远程服务器,你可以使用如下命令添加:
git remote add origin
如此你就能够将你的改动推送到所添加的服务器上去了
分支
分支是用来将特性开发绝缘开来的。在你创建仓库的时候,master 是“默认的”。在其他分支上进行开发,完成后再将它们合并到主分支上。
git checkout -b feature_x创建一个叫做“feature_x”的分支,并切换过去:
切换回主分支:
git checkout master
再把新建的分支删掉:
git branch -d feature_x
除非你将分支推送到远端仓库,不然该分支就是 不为他人所见的:
git push origin
重命名本地分支
git branch -m branch-old-name branch-new-name
更新
要更新你的本地仓库至最新改动,执行:
git pull origin git fetch origin
标签
在软件发布时创建标签,是被推荐的。这是个旧有概念,在 SVN 中也有。可以执行如下命令以创建一个叫做 1.0.0 的标签:
git tag 1.0.0 1b2e1d63ff
1b2e1d63ff 是你想要标记的提交 ID 的前 10 位字符。使用如下命令获取提交 ID:
git log
你也可以用该提交 ID 的少一些的前几位,只要它是唯一的。
// 给tag添加注释
git tag -v1.4 -m 'my version 1.4'
// 显示tag版本记录git show tag-name// 一次性推送所有tag到远程服务器git push origin --tags
// 取出打过tag的某个版本 git checkout -b branch_name tag_name
// 删除tag时需注意,如果向远程服务器提交了tag,则删除tag时,不仅要删除本地的tag,还要删除远程的tag
// 删除本地的tag命令是
git tag -d tag-name
// 删除远程tag的命令是
git push origin --delete tag-name
替换本地改动
假如你做错事(自然,这是不可能的),你可以使用如下命令替换掉本地改动:
git checkout --
此命令会使用 HEAD 中的最新内容替换掉你的工作目录中的文件。已添加到缓存区的改动,以及新文件,都不受影响。
假如你想要丢弃你所有的本地改动与提交,可以到服务器上获取最新的版本并将你本地主分支指向到它:
git fetch origin master
git reset origin/master --hard
git 忽略文件的设置方式
可参考以下两个网址
git ignore文件的三种设置方式[http://www.jianshu.com/p/267cd94f1d49 ]
git ignore文件设置的具体语法[http://www.cnblogs.com/pylemon/archive/2012/07/16/2593112.html#3226325]
重点说一下踩过的坑:
.gitignore 文件可以忽略自己。忽略的文件,只针对未跟踪文件有效,对已加入版本库的文件无效。
来源: http://www.92to.com/bangong/2017/07-12/25123104.html