大多数人,都低估了编程学习的难度,而高估了自己的学习能力和毅力。
当前系列: 垃圾桶 修改

cmd常用DOS命令

盘符转换:

目录:md/rd/cd/dir  (帮助记忆:make/remove/change directory)

echo:查看环境变量(中的PATH)

echo %PATH%
set PATH

注意:在dos窗口中以命令行方式对环境变量的操作只对当前窗口的应用有效

type/more:显示文件内容

管道:>, >>, <

[综合运用]创建文件:type nul > [filename]


确认git已安装

安装Visual Studio 2107之后,在vs2017安装目录中找到 git.exe

检查系统环境变量path(我的电脑-属性-高级系统设置-),是否添加了git.exe的路径

运行cmd,输入:

git --version
或者,按Team Explore提示安装gitbash


git config

-- list:显示所有配置 (退出:q)

三种配置

位置:

  • system/global:$HOME (C:\Users\$USER)
  • local:.git\config

修改示例:

  • git config --global user.name "fg"
  • git config --global merge.tool vsdiffmerge
  • git config --bool core.bare true


仓库(repository)

git的逻辑:现在本地创建一个仓库,所以变化首先提交到本地仓库,然后再进行“推送”

git init [-bare]      #在当前目录初始化一个(空)仓库
git add               #往仓库中添加需被跟踪(track)的文件
git commit -m "init"  #将变化提交到仓库中

Linux风格:

  • 成功不报任何提示
  • 如果忘记 -m,就要面对“Linux样式”的文本编辑器……(退出:ESC => :wq)

查看当前状态

git status [-s]

关键字:change / untracked / unstaged / staged/  commit

  • 没有add的内容(不是文件)不会被track和stage:每一次commit之前都需要add (参数:-a,可以跳过暂存直接提交 )
  • 没有被track和stage的内容不会被commit
  • 但被track的文件改动(change)会被跟踪(track)

忽略不需要被track的文件:.gitignore。查看被git管理的文件:

git ls-files


常用命令

查看更改(和Repoistory相比

git diff             #尚未添加到stage的变更:比较工作区和仓库
git diff --staged    #已经添加到stage,尚未提交的变更:比较staged和repository

查看历史提交

git log <filename>        #某个文件的历史记录
git log -p -2 --stat      #最近两次的提交,包含差异和统计信息
git log --since=2.weeks   #最近两周以内的提交
git log -Sagain           #内容中包含again的提交
git log --grep init       #message log中包含init的提交 global regular expression print
git log --pretty=oneline   #一次提交只显示一行
git log --pretty=format:"%h - %an %cd : %s"   #指定格式 hash / author name / commit date / subject


标签

打标签:

git tag v1.0                       #轻量级
git tag -a v1.0 [-m "<message>"]   #加注释
git tag -a v1.1 <commit_hash_id>   #在<commit_hash_id>上补打标签
查看标签:
git tag [-l <seek_tag_part>] #显示现有的标签
git show <tag>               #显示<tag>标签详细信息
删除标签:
git tag -d <tag_name>
迁出标签:
git checkout <tag_name>

其他操作(慎重)

删除文件

  • del(普通删除) + add + commit
  • git rm <file_name> + commit
参数:--cached,可以在删除repository的同时保留一份工作区 untracked的副本

重命名

  • 如果直接(用操作系统)重命名文件,会导致git认为该文件为“新文件”,无法记录之前的log  (和文档不符……再尝试
  • git mv<old> <new>

撤销

git commit --amend      #合并两次提交(修复上一次提交)
git reset HEAD <file>   #从暂存区中移出
git checkout -- <file>  #撤销(工作区上)文件上的更改,类似于undo/ctrl+z
体会:暂存区的意义


远程仓库管理

为什么需要?多人协作。

首先,你要有一个远程仓库!(无法在本地通过git命令在远程创建一个仓库

  • 建议:使用github(延伸:局域网中可以直接使用文件协议,也可以自己搭建服务器,使用https、ssl、git等协议)
  • 注意:要么clone(fork本质上就是clone)到本地(空?)文件夹,要么push到远程的“空”仓库,以确保两个仓库是“一致”的。不能把A仓库push到B仓库……

然后,在本地(local)仓库和远程(remote)仓库之间同步(sync):

clone    #克隆,把远程仓库(包含历史记录,不仅是最新版本)复制到本地
fetch    #获取远程仓库里(别人提交的)未同步的更新信息,并存放到本地仓库
merge    #将fetch得到的更新同步到工作区(分支合并)
pull     #=fetch+merge
push     #把本地仓库中的改动推送到远程仓库

remote管理:

git remote [-v]                     # 显示管理的远程仓库
git remote add <remote_name> <url>  # 将<url>添加进远程仓库管理,本地名为<remote_name>
git remote show <remote_name>       # 显示<remote_name>的详细信息
git remote rename <old> <new>       # 重命名
git remote rm <remote_name>         #删除远程仓库的管理
推送标签:
git push origin <tag_name>    #将标签推送到远程仓库


分支


git branch                         #显示所有分支 --merged --no-merged
git branch <branch_name>           #创建新分支<branch_name>
git checkout [-b] <branch_name>    #切换到分支<branch_name>
git merge <branch_name>            #在当前分支上合并<branch_name>
git branch -d <branch_name>        #删除(delete)不需要的<branch_name>




跟踪分支

基于远程分支创建的本地分支会自动成为跟踪分支,即与远程分支直接关联的本地分支。

git branch -vv  #查看跟踪的远程分支

比较:

git checkout -b <new_branch_name> <remote>/<branch_name>	#能指定新创建分支的名字
git checkout --track  <remote>/<branch_name>		#指定需要跟踪的远程分支名字
git checkout <branch_name>	#如果本地没有远程分支对应的分支,自动创建并跟踪




思考题:这两条命令的本质是什么?

git reset HEAD <file>   #从暂存区中移出
git checkout -- <file>  #撤销(工作区上)文件上的更改,类似于undo/ctrl+z

命令:git reset 后可指定版本号,进行一个完整的reset操作:

复习:工作区 (work directory) => 暂存区(stage/index) => 仓库(repoistory)
  1. 移动HEAD所指向的目标/分支(checkout是修改HEAD本身):实质是撤销最近一次git commit命令,但不改变暂存区和工作区(-- soft),可以继续commit
  2. 更新索引(--mixed:默认),将修改移出暂存区
  3. 更改工作区(--hard:谨慎使用)
注意:git reset 仅在当前分支有效(不能跨分支操作)

比较reset和checkout

推荐:git revert HEAD[^] | <log_number>

将撤销操作当成一次提交保存,而不会真的删除一次提交。




帮助(help)

  • git help <verb>
  • git verb --help


作业

在cmd窗口中,使用DOS和git命令,完成以下任务:

  • 在global范围内,将自己的name加上前缀:yz-
  • 创建一个空文件夹,在里面新建一个git repository
  • 再新建三个文件,修改其内容的同时用git命令让其保持状态为:
    1. article:untracked
    2. problem:change to be committed 和 not staged
    3. task:committed
  • 显示problem上未添加到staged和已添加到staged上的变更
  • 显示task的提交记录
  • 再次提交task的修改,并用新的提交覆盖之前的提交
  • 将problem中已经staged的修改撤销,使得工作区找不到之前的变更
  • 打一个标签v1.0;再提交若干次,然后再打一个标签v1.1;再选择之前的一次提交,打一个标签v1.0.1
  • 将problem重命名为help,确保help上仍然保留着problem之前的提交记录
  • 在文件夹x和y下分别clone上述repository,然后:
    1. x上修改提交推送
    2. y上修改提交提送


源栈 项目管理 Git 命令行
觉得很 ,不要忘记分享哟!

任何问题,都可以直接加 QQ群:273534701

在当前系列 垃圾桶 中继续学习:

上一课: 已经是第一课了……

我们的 特色

  • 面向就业
  • 线上线下结合
  • 同学互助
  • 师生共赢

报班 QQ群:273534701

  • 获取视频资料
  • 要求作业点评
  • 参加阶段性测试
  • 模拟面试