git command line for windows
1. 下载git客户端(提供bash 窗口)
- 安装成功之后,可以通过客户端(GUI)进行仓库的创建,或者通过git bash命令行进行操作(推荐)
-
安装成功之后,右键一个目录,会出现 :git bash here选项,点击可调取git bash窗口
git bash here
git bash 窗口
小结
下载git 客户端,可以在windows下使用linux命令,是git 代码托管的第一步。
2. 注册github账号,进行代码托管
1. 使用github有如下优势
- 通过github代码托管,方便进行代码的分享,版本控制。
- 利用github移动客户端,可方便的查看代码
- github拥有丰富的仓库,可以通过github检索到自己需要的资源
- 下一步计划建立project,需要project中的成员能够使用github
2. github可能需要使用vpn(外网?),我的本地网不能登录,或者很慢,移动端不受影响。
3. 注册github账号
image.pngsign up 注册,sign in 登录
4. github客户端下载(使用客户端下载repository更快)
github 客户端
5. 文本编辑器
- atom,功能强大,界面灵活,支持git
3. git 常用的命令(git bash 支持联想功能,可tab)
1. git 的基本配置
git --version #显示版本号
git config --gloabal user.name 'xxx'
git config --global user.email 'xx@xx.com'
git config --system
git config --local
# 优先级:local > global > system
git config --global -l
或者 gitconfig --global --list
image.png
通过这些配置,可以通过邮件向你发送提醒。
2. 新建git仓库
git init git_learning # 新建仓库,取名
cd git_learning # 进入新建仓库文件夹
# 把当前目录作为仓库的托管目录
git init
ls -al # 有.git 这个隐藏文件夹
3. 目录下代码托管
pwd
touch hello_git # 创建代码file
vim hello_git
# ========= 设置仓库的属性=======#
$ git config --local user.name 'zhangyanjie'
$ git config --local user.email '765064890@qq.com'
$ git config --local --list
# ======== 给需要管理的文件夹管理权限======= #
cp ../hello_txt . # 将代码加入仓库,或者在仓库中新建代码
git add hello_git # 添加文件到暂存区
git status #check 是否添加到暂存区
# 仓库中创建的文件不能正常添加到commit 命令
git commit -m'well done'# 添加文件说明
git log # 查看git 日志
image.pnggit add file1 file2 dir1 dir2 # 可同时添加多个指定文件或者目录
git add . 添加该仓库的所有文件到暂存区
git add -u # 将寄存区所有文件一起
git commit -m'add ref'
小结
- 通过在工作目录下的修改添加到缓存区
- git add -u #整体添加
- git commit -m'msg' # 缓存区取代,提交
4. git 目录重命名&删除
git reset --hard # 将暂存区和工作区清零,危险
git mv readme readme.cp # git 托管文件的重命名
git rm readme.cp # 删除git 托管的文件
git commit -m'move readme to readme.cp'
git log
小结
- 快速修改寄存器文件名
git mv a b
git commit -m'description'
- 快速修改寄存器文件名
- 强制清除工作区的命令:git reset --hard
5. 查看版本演化
git log --oneline # 简要的变更
git log -n4 --oneline # 最近的四次变更
git log # 当前分支的历史
git log --all #查看所有分支的历史
git log --all -graph # 图形化演示演化过程
git log --all -n4 # 最近四个演化
git log --all -n4 --graph # 最近四个演化,图形化
git log --oneline temp # 指定某一分支演化
git help --web log # 查看详细的参数接口
6. 切换分支
git branch -v # 查看本地有多少分支
$ git checkout -b temp 9676b2bf0ca061d788587e3 #快速创建一个临时分支
vim hello_gt # 修改文件
git commit -m'add test' # 提交修改
git commit -am'add test' #工作区的东西,直接放到版本历史库中,不推荐
git branch -av # 查看所有分支
image.pnggit branch -av 查看所有分支
git checkout -b tmp 创建一个新分支 git branch new_branch_name
git chechout master 切换到默认的分支master
7. 删除branch
gitk --all # 通过图形界面显示分支,仅windows可用
git branch -d branch_name # 不能清除
'''error: The branch 'temp' is not fully merged.
If you are sure you want to delete it, run 'git branch -D temp'.'''
git branch -D branch_name # -D强制清理
小结
- 删除branch
git branch -D branch_name # -D强制清理
git branch -d branch_name
git help --web branch # 查看手册
8. 配置公私钥
ls -al ~/.ssh #查看是否存在公私钥
$ ssh-keygen -t rsa -b 4096 -C "765064890@qq.com" #产生公私钥,默认enter
ls -al ~/.ssh #查看是否存在公私钥
image.pngid_rsa 是私钥 id_rsa.pub是公钥
copy ssh key to github
头像下标——setting——SSH——new SSHkey
9. 远端仓库克隆到本地
#本地协议
/path # 哑协议
file:///path # 智能协议
https://path
http://path # 平时接触到的协议
user@git-server.com:path/to/ # ssh协议,工作中最常用的智能协议
# 测试备份协议
mkdir 666-backup
cd 666-backup
$ git clone --bare /d/git_learning/git_learning/.git ya.git # 通过哑协议进行文件clone
$ git clone --bare file:///d/git_learning/git_learning/.git zhineng.git # 本地智能协议
$ git remote add zhineng file:///d/git_learning/git_learning/666-backup/zhineng.git # 备份到本地远端
$ git remote -v # 关联远端地址
git branch -av
git branch new_branch test #创建新的branch
$ git push zhineng # 保存修改到远端
$ git push --set-upstream zhineng test # 自动纠错提示
# 没明白,try again
$ git clone --bare file:///d/git_learning/git_learning/.git inter.git # clone 一个裸仓库
# 和远端仓库进行关联
git remote -v
# 将当前工作同步到远端
$ git remote add intel file:///d/git_learning/git_learning/666-backup/inter.git
# 将仓库变更push
$ git push intel # 同步变更
本地仓上传到github
git remote -v # 查看本地远端
# 头像——your repository——clone or download——use SSH——粘贴按钮
$ git remote github git@github.com:Lianlizyj/hello_world.git #报错,github 远端未添加
$ git remote add github git@github.com:Lianlizyj/hello_world.git # 新增远端站点
git remote -v # fetch 下载,push上传
# 建好remote
git push github --add # print yes,没有基于远端做变更
gitk --all
clear
git pull github # fentch + merge
$ git fetch github master # 把github连接到本地
git branch -va # 所有branch
git checkout
git merge gitthub/master # 报错fatal: refusing to merge unrelated histories
git merge -h
$ git merge --allow-unrelated-histories github/master #使用缺省值
$ git push github master # 上传到远端
image.png
小结
git init # 将文件设置为git托管
git add file or dir
git commit -m'msg'
git remote add matlab git@github.com:Lianlizyj/hello_world.git
git remote -v
$ git fetch hello master # 将远端的 master 下载到本地
$ gitk --all
$ git merge --allow-unrelated-histories hello/master
$ git push --set-upstream hello master
每日总结
- git user 配置:
git config user.name 'zyj'
git config user.email 'xx@xx.com'
- 创建仓库:
git init reps_name
- 添加文件到管理:
git add file_name # 提交到寄存区
git add -u #全部提交
- 查看状态:git status
- 提交:
git commit -m'msg'
git commit -am'msg'
- 查看配置信息:
git config --local(global、system) --list
git config --local user.name
- 文件重命名
git mv a b
- 版本演化
git log # 详细信息
git log --oneline -n4 --graph # 简要模式版本变化,图像化显示,最近4次变更
git log --oneline master # 指定branch
- 查看帮助信息
git help --web log
- 调用图形界面查看
gitk
- branch
git checkout -b temp 37be9e9 # 指针,创建branch
git checkout master # 切换branch
git branch -av # 查看所有branch
- 查看指针对应的信息
git cat-file -t cffcf76994b2ba420cc467fe2363de3222536c7a # 查看指针指向的类型
git cat-file -p cffcf76994b2ba420cc467fe2363de3222536c7a # -p 查看内容,hash 值唯一性
- 寄存区重置(慎用)
git reset --hard
修改最新的commit的msg进行修改
git log -n1
git commit --amend
# 修改msg
git log -n1
修改老旧commit的msg
git log
$ git rebase -i HEAD~4# base 到要修改的parents
# 修改两次
# 使用分离头指针
基于维护自己的分支,没有上传
连续多个commit整合
$ git log
$ git rebase -i d9b859931baef8348
# 选择开关 r,s
# 填写整合的命令
git log
把间隔的commit拼凑在一起
git log
git rebase -i 父指针
git rebase --continue
$ git commit --allow-empty
# 不会整,崩溃了
# 从master复制,重新测试
$ git branch -D fix_back # 删除不能处理的branch
$ git branch test master # 复制branch
$ git checkout test # 切换branch
$ git rebase -i d9b859931ba# rebase重新修改命令
# 复制需要调整的commit的指针
# 将需要放在一起的commit放在一起
# 开始的commit 用pick,之后的用s,将命令合并
$ git status # 查看状态
$ git rebase --continue# 继续进行
git log
小结
- branch可以基于某一副本复制粘贴
- rebase 命令可用来修改commit的msg,‘r’。可用来整合命令‘pick+s’
- 按照提示信息进行报错操作
如何比较暂存区的文件和当前分支的commit进行比较
git status
vi index.html
git add index.html
$ git diff --cached # 查看HEAD和缓存区的区别
vi index.html
git add index.html
$ git diff --cached # 查看HEAD和缓存区的区别
$ git commit -m'Add first git commond'
小结
- html,架构中添加信息
- git diff --cached# 比较HEAD和暂存区的区别
比较工作区和暂存区的区别
vim index.html
$ git status
$ vim styles/style.css
git diff # 比较工作区和暂存区的区别
vi readme.md
git diff -- readme.md # 查看具体文件的差别,可以多个
小结
- 调整html背景颜色,调整字体的颜色和大小
- 比较工作区和寄存区的区别
git diff -- a b
让暂存区恢复成HEAD
git reset HEAD # 删除暂存区的改变
git status
git diff --cached # 对比工作区和暂存区,发现没有差别
小结
- 删除暂存区,恢复成工作
区的内容
- 删除暂存区,恢复成工作
git reset HEAD
将工作区的文件恢复成暂存区的状态。
工作区——暂存区——commit
vi index.html
git add index.html
git diff # 比较工作区和暂存区的区别
# 取消工作路径性的变更,checkout
# 改变暂存区的内容,用reset
$ git checkout -- index.html#危险命令,修改不保存
$ git diff index.html
小结
- 将工作区用暂存区覆盖
git checkout -- file_name
取消暂存区的内容,部分文件想恢复成HEAD
$ git status
$ git reset HEAD -- styles/style.css # 将寄存区指定文件恢复成HEAD
小结
- 将暂存区恢复成HEAD
git reset HEAD -- filename1 filename2
消除最近几次的提交(回退到之前的状态)
gitk --all
# 将某一分支恢复成某commit提交的状态
git branch -av
git log --oneline
$ git reset --hard 27147fe # 恢复到指定的commit(工作区和暂存区)
gitk --all
小结
- 恢复到指定的commit(工作区和暂存区)
git reset --hard 27147fe
commit 文件之间的差别
git log -n8 --all --graph
git diff test master -- readme.cp # 对两个分支指向的最近的commit进行比较
$ git diff HEAD b592328377d3 -- index.html
小结
- 对分支进行比较
git diff master test -- index.html
正确的删除文件的方法
rm readme
git rm readme
git reset --hard HEAD
# equal to
git rm filename
小结
- 删除文件 git rm filename
- 回复到指定状态
git reset --hard HEAD
紧急加塞的处理办法
手头的工作先保存
vi index.html
git status
git stash # 把当前工作保存,不影响当前工作区。
git status
git stash apply # 将压栈的内容取出,指针保存一直用
$ git stash list # 显示原来工作所处的位置
$ git stash pop # 显示错误,已被覆盖
git stash
git stash pop # 不保存当前工作的指针地址
小结
- 清除当前工作台,将当前工作内容封装
git stash
- 进行紧急工作
- 紧急工作完成继续当前工作
git stash apply # 记住之前工作的想在在哪里,这个地方就停放当前的工作,可重复是使用
git stash pop # 随机寻找一个地方,存放,下次遇到同样的问题,不一定发放在相同的地方
指定不需要git管理的文件
mkdir doc
echo 'hi'> doc/readhim
git status
vim .gitignore # 文件黑名单
rm -r doc
echo 'i am doc' > doc
git status
小结
- .gitignore文件,添加管控文件黑名单(不管理)
多人协作修改
git clone git@github.com:Lianlizyj/hello_world.git git_clone
git config --add --local user.name 'ZYJ'
git config --add --local user.email 'lianlizyj@mail.dlut.edu.cn'
git config --local --list
git config --local -l
vi .git/config # 修改配置文件
git branch -av
git checkout -b feture/add_git_command origin/feature/add_git_command # 基于远端分支建立新分支
vi README.md #修改readme.md
git add -u # 添加到暂存区
git status
git log
git push origin HEAD # 上传修改
git config --local -l
git remote -v
git fetch hello
git branch -av
$ git checkout -b feature/add_git_command hello/feature/add_git_command
$ git branch -av
# 切换用户
vim readme.md
git add -u
git commit -m'some people are in trouble'
$ git push origin HEAD # trouble 2 push
# 不起作用,两人在同一个branch下,不能修改相同文件,会引发冲突,解决办法是讲冲突的地方删除
# 假如两人修改的是不同的文件,fast-forwards的解决方案如下
$ git branch -av
vi readme.md
$ git push hello # 报错,not-fast-forward
git fetch hello
$ git merge hello/feature/add_git_command
# 没看懂
小结
修改文件要新建branch,然后再branch上连接到本地修改,然后提交。
相同分支修改不同部分
快速找到感兴趣的项目
- git 最好 学习 资料 in:readme stars:>1000
- blog easily start in:readme stars:>5000
- 'after_script:'+'stage:deploy' filename:.gitlab-ci.yml
搭建一个简洁的blog
- fork
- config
- 添加到post
保证开源项目的质量
- fork 项目到本地
- 2.本地修改
- pull request 到源工程
- merge 是紫色的,其他是红色的
- code review CI检查
网友评论