git for windows的使用
此文章暂停更新。最后更新日期:2017-12-09
一、准备工作:
1、申请GitHub账号
https://github.com/
邮箱、密码及用户名(记好)
2、软件下载、安装
https://git-for-windows.github.io/
git安装完成后,在开始菜单中会有Git项,里面有“Git Bash”、“Git CMD”、“Git GUI”等三项菜单。
Git Bash:Linux风格的命令行,使用最多,推荐最多。
启动Git Bash会出现$提示符,用户可以输入相关命令进行操作。
Git CMD:Windows风格的命令行。
Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令。
*启动Git Bash时,360安全卫士会提示风险。
3、三个Bash操作命令
以下是最最基本的三个Bash操作命令:
pwd : 显示当前所在的目录路径
cd /e/github 进入E盘github目录
cd . . 回退到上一个目录
cd 直接进入默认目录
ls或ll: 列出当前目录中的所有文件,ll(两个小写字母l)列出的内容更为详细
*更多的操作命令,请见文末。
*可以输入help命令来查看所有的操作命令,或“help 命令”来查看具体某个命令。
二、git操作的四个基本概念
Git本地有三个工作区域:工作目录(Working Directory或Workspace或Working tree)、暂存区(Stage或Index)、资源库(Repository或Git Directory)。
如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。
文件在这四个区域之间的转换关系如下:
简单地说,就是:本地(你的电脑目录)与远程(服务器)两大块。
工作区workspace对应电脑中的一个目录(概念上不包括隐藏目录.git)。
暂存区Stage(或者Index)与资源库Repository对应电脑中此目录下的隐藏目录.git(版本库)。
(.git是存放Git管理信息的目录,初始化仓库时自动创建。)
所以初学者没事千万别去删除这个隐藏目录下的内容。
(如果你不想进行版本控制了,删除此文件夹即可。哈哈)
三、git 基本操作
1、github网上建仓库
登录github.com网站,建立一个新仓库(New repository),输入仓库名Repository name,点击Create repository即可。
本例中仓库名为GitDemo,对应的url地址:https://github.com/loongoo/GitDemo.git
2、本地初始化仓库(git init)
回到本地(自己电脑上),使用Git Bash命令方式操作
用cd命令切换到要存放资料的目录下。本例中在E:\github
建立一个目录,并初始化仓库: git init 仓库名
这个仓库名与在github.com网站上建立的仓库名相同,实际上在本地也会是一个目录名称。
执行:
git init GitDemo
之后进入此仓库,并查看文件(当然是空的):
cd GitDemo
ls -l
3、仓库状态与文件添加(git status/git add)
接下来,我们可以进行“复制/粘贴”操作,将协同开发文档放到此文件夹。
查看仓库状态:git status 或 git status -v
查看指定文件状态:git status 文件名
此命令时时刻刻会经常用到,操作查看状态必备。
会发现刚复制来的这些文件状态为:Untracked files(未跟踪文件)
添加指定文件到暂存区:git add 文件名
添加指定目录到暂存区,包括子目录:git add 目录名
添加当前目录的所有文件到暂存区:git add .
(此命令中 . 表示当前目录)
4、git操作中的文件状态
git操作中文件的四种状态示意图
- Untracked:未跟踪, 此文件在文件夹中,但并没有加入到git库,不参与版本控制。
通过git add
状态变为暂存Staged状态。 - Unmodify:文件已经入库,未修改,即版本库中的文件快照内容与文件夹中完全一致。
如果文件被修改,状态变为Modified。
如果使用git rm --cached
移出版本库,则成为Untracked文件。 - Modified:文件已修改,仅仅是修改,并没有进行其他的操作。
通过git add
可进入暂存Staged状态。
使用git checkout -- filename
,则丢弃修改,返回到Unmodify状态,即从库中取出文件,覆盖当前修改。 - Staged:暂存状态。
执行git commit
则将修改同步到库中,此时库中文件和本地文件变为一致,文件为Unmodify状态。
执行git reset HEAD filename
取消暂存,文件状态为Untracked或Modified。[1]
具体何种状态取决于文件本来的状态。本来是新文件,未跟踪的,取消暂存后,依然是Untracked。如果文件已改动过(Modified),则取消暂存后会是Modified状态。简记之,哪里来,回哪里去。
思考:
- 所谓文件已修改,前提是指这个文件参与了版本控制、本身并不是Untracked未跟踪文件。试想一个未跟踪文件,删除它,修改它,其实对版本控制都无影响,因为这个文件压根就没有参与版本控制。
- 网上大量文章关于“暂存状态文件执行
git reset HEAD filename
后,状态变成Modified”的说法是片面的!请小心甄别。
下面以一个文件demo8.txt为例,演示一下文件状态的变化。
echo "file-8 demo" > demo8.txt
git status
git add demo8.txt
git status
git reset HEAD demo8.txt
git status
git add demo8.txt
git commit -m "demo8 first commit" demo8.txt
git status
echo "demo8 changed" >> demo8.txt
git status
git checkout -- demo8.txt
git status
git add demo8.txt
git commit -m "demo8 2nd commit" demo8.txt
git status
git rm --cached demo8.txt
git status
演示中几乎每条命令之后,都要用git status
查看一下状态。对比观察发现变化。
余下的操作,不截图了。
操作命令说明:
将暂存区的文件提交到版本库:git commit -m "提交注释" 文件名
将暂存区的文件撤回到工作区:git reset HEAD 文件名
恢复文件(从版本库中恢复覆盖工作区文件):git checkout -- 文件名
(这里的--
前后都有空格,用来区别命令中的参数与文件名)
停止跟踪文件(删除暂存区文件,保留工作区的文件):git rm --cached 文件名
特别说明:
执行:git rm filename
,会真的删除工作区的文件(物理文件),并将删除操作记录到暂存区(这很关键)。所以文件没了,还是可以恢复过来。
git rm
能将文件从暂存区删除(加--cached
参数),或者将文件从暂存区与工作区删除。
只想删除工作区的文件,可以用Bash下的rm filename
命令来完成(见文末Bash基本操作命令)。
下例演示删除文件、恢复文件操作
准备工作:生成一个文件demo10.txt,并提交到版本库。
echo "add demo10" >demo10.txt
git add demo10.txt
git commit -m "add demo10" demo10.txt
git status
恢复演示操作前的准备
删除掉文件,ll查看文件demo10.txt已不存在。
git rm demo10.txt
ll
git status
git reset HEAD demo10.txt
ll
git checkout -- demo10.txt
ll
恢复成功。(将原先存入到版本库的文件恢复出来)
恢复演示操作5、Git远程操作[2]
# 显示远程git仓库信息:此例中可以看到主机名origin,
# 远程地址:https://github.com/loongoo/GitDemo.git
git remote -v
# 获取远程git仓库的全部更新(通常用来查看其他人的进程,与自己的文件无影响)
git fetch origin
# 可以获取指定的分支(branch)。如获取origin主机上的master分支
git fetch origin master
# 查看获取的远程分支
git branch -r
# 查看所有的分支
git branch -a
# 本例中本地当前分支是master(前面有一个`*`号标识),远程分支是origin/master
# 在当前分支上合并远程分支
git merge origin/master
# git pull命令的作用是:取回远程主机某个分支的更新,再与本地的指定分支合并。
# git pull <远程主机名> <远程分支名>:<本地分支名>
# git pull操作相当于先git fetch操作,再git merge操作。
git pull origin master:master
# 在git clone操作时,所有本地分支默认与远程主机的同名分支建立追踪关系(tracking),
# 也就是说,本地的master分支自动"追踪"origin/master分支。
# git pull origin master:master 可以简化成:git pull origin
# 如果当前分支只有一个追踪分支,则远程主机名都可以省略。
# 命令简化成:git pull
# 手动设定追踪关系
# 老式命令:git branch --set-upstream master origin/next
# 指定master分支追踪origin/next分支。
# 推荐命令:git branch -u origin/next
# 切换分支操作:git checkout 分支名
# 删除分支:git branch -d 分支名
# 不能删除当前分支,所以删除前需要先切换分支。
# git push命令将本地分支的更新,推送到远程主机
# 格式:git push <远程主机名> <本地分支名>:<远程分支名>
git push origin master:master
# 当前分支与远程分支存在跟踪关系,则可简化成:git push origin
# 如果当前分支只有一个追踪分支,则远程主机名都可以省略。
# 命令简化成:git push
6、Git配置git config
# 显示git配置信息
git config -l
# 显示配置信息中的用户名
git config user.name
四、如何向GitHub贡献代码
远程开源仓库-自己的远程仓库-本地仓库获取开源项目最新信息:
增加上游项目示例:
git remote add upstream https://github.com/pythonzhichan/DailyQuestion.git
其中upstream上游项目地址的别名。
(如果要删除上游项目,可以用命令:git remote remove <上游项目别名>
)
在本地获取upstream上最新的信息:
git fetch upstream
合并到本地分支:
git merge upstream/master
再推送到自己的网上仓库:
git push origin master
请参阅:作为GitHub初级用户,如何向GitHub贡献代码
https://foofish.net/how-to-contribute-to-open-source-in-github.html
附录A:
0、这是什么~?
~ 代字号或波浪号swung dash or tilde
1、Bash基本操作命令
cd改变目录
cd /d/github 进入D盘github目录
cd . . 回退到上一个目录
cd 直接进入默认目录
pwd : 显示当前所在的目录路径
ls 或ls -l 或ll: 列出当前目录中的所有文件,ll(两个小写字母l)列出的内容更为详细
touch新建一个文件
touch index.js 在当前目录下新建一个index.js文件
rm删除一个文件
rm index.js 删除index.js文件
mkdir新建一个目录
rm -r删除一个目录
rm -r src 删除src目录(包括文件,没有删除提示)
mv 移动文件
mv index.html src
此命令中index.html是我们要移动的文件, src是目标文件夹,index.html文件与src文件夹都在当前目录下
reset 重新初始化终端/清屏
clear 清屏
history 查看输入过的命令列表(命令历史)
help 帮助
exit 退出
2、一些问题的处理:
故障现象:git commit操作时出现失误,再次git commit时出现出错提示:
fatal: Unable to create ‘xxxxxx/.git/index.lock’: File exists.
解决:删除隐藏目录.git(版本库)下的index.lock文件。
git commit时忘写-m "注释",会进入注释书写状态,如何写入提交说明然后退出
按i然后输入commit注释内容,按esc键,输入:
,然后再输入wq
,按回车即可退出。
具体可参见:https://segmentfault.com/q/1010000005979356
参考文章:
[1]Git最详细篇-五星收藏
http://www.jianshu.com/p/e8a6c4e40b58 [注意:文件状态部份说法不全面,注意甄别]
[2]阮一峰的网络日志:Git远程操作详解
http://www.ruanyifeng.com/blog/2014/06/git_remote.html
Git常用命令备忘
https://foofish.net/git-command.html
网友评论