git安装即基本操作

git command line for windows

1. 下载git客户端(提供bash 窗口)

git GUI for windows 下载地址

  1. 安装成功之后,可以通过客户端(GUI)进行仓库的创建,或者通过git bash命令行进行操作(推荐

git GUI使用说明

  1. 安装成功之后,右键一个目录,会出现 :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

github 官网

2. github可能需要使用vpn(外网?),我的本地网不能登录,或者很慢,移动端不受影响。

3. 注册github账号

image.png

sign up 注册,sign in 登录

4. github客户端下载(使用客户端下载repository更快)

https://desktop.github.com/

github 客户端

5. 文本编辑器

    1. 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 日志

git add file1 file2 dir1 dir2 # 可同时添加多个指定文件或者目录
git add . 添加该仓库的所有文件到暂存区

image.png
git add -u # 将寄存区所有文件一起
git commit -m'add ref'

小结

    1. 通过在工作目录下的修改添加到缓存区
    1. git add -u #整体添加
    1. 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

小结

    1. 快速修改寄存器文件名
      git mv a b
      git commit -m'description'
    1. 强制清除工作区的命令: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 # 查看所有分支

git branch -av 查看所有分支
git checkout -b tmp 创建一个新分支 git branch new_branch_name
git chechout master 切换到默认的分支master

image.png

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强制清理

小结

    1. 删除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 #查看是否存在公私钥

id_rsa 是私钥 id_rsa.pub是公钥
copy ssh key to github
头像下标——setting——SSH——new SSHkey

image.png

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

每日总结

    1. git user 配置:
git config user.name 'zyj'
git config user.email 'xx@xx.com'
    1. 创建仓库:
git init reps_name
    1. 添加文件到管理:
git add file_name # 提交到寄存区
git add -u #全部提交
    1. 查看状态:git status
    1. 提交:
git commit -m'msg'
git commit -am'msg' 
    1. 查看配置信息:
git config --local(global、system) --list
git config --local user.name
    1. 文件重命名
git mv a b
    1. 版本演化
git log # 详细信息
git log --oneline -n4 --graph # 简要模式版本变化,图像化显示,最近4次变更
git log --oneline master # 指定branch
    1. 查看帮助信息
git help --web log
    1. 调用图形界面查看
gitk
    1. branch
git checkout -b temp 37be9e9 # 指针,创建branch
git checkout master # 切换branch
git branch -av # 查看所有branch
    1. 查看指针对应的信息
git cat-file -t cffcf76994b2ba420cc467fe2363de3222536c7a # 查看指针指向的类型
git cat-file -p cffcf76994b2ba420cc467fe2363de3222536c7a # -p  查看内容,hash 值唯一性
    1. 寄存区重置(慎用)
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

小结

    1. branch可以基于某一副本复制粘贴
    1. rebase 命令可用来修改commit的msg,‘r’。可用来整合命令‘pick+s’
    1. 按照提示信息进行报错操作

如何比较暂存区的文件和当前分支的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'

小结

    1. html,架构中添加信息
    1. git diff --cached# 比较HEAD和暂存区的区别

比较工作区和暂存区的区别

vim index.html
$ git status
$ vim styles/style.css
git diff # 比较工作区和暂存区的区别
vi readme.md
git diff -- readme.md # 查看具体文件的差别,可以多个

小结

    1. 调整html背景颜色,调整字体的颜色和大小
    1. 比较工作区和寄存区的区别
git diff -- a b

让暂存区恢复成HEAD

git reset HEAD # 删除暂存区的改变
git status
git diff --cached # 对比工作区和暂存区,发现没有差别

小结

    1. 删除暂存区,恢复成工作
      区的内容
git reset HEAD

将工作区的文件恢复成暂存区的状态。

工作区——暂存区——commit

vi  index.html
git add index.html
git diff # 比较工作区和暂存区的区别
# 取消工作路径性的变更,checkout
# 改变暂存区的内容,用reset
$ git checkout -- index.html#危险命令,修改不保存
$ git diff index.html

小结

    1. 将工作区用暂存区覆盖
git checkout -- file_name

取消暂存区的内容,部分文件想恢复成HEAD

$ git status
$ git reset HEAD -- styles/style.css # 将寄存区指定文件恢复成HEAD

小结

    1. 将暂存区恢复成HEAD
git reset HEAD -- filename1 filename2

消除最近几次的提交(回退到之前的状态)

gitk --all
# 将某一分支恢复成某commit提交的状态
git branch -av
git log --oneline
$ git reset --hard 27147fe # 恢复到指定的commit(工作区和暂存区)
gitk --all

小结

    1. 恢复到指定的commit(工作区和暂存区)
git reset --hard  27147fe

commit 文件之间的差别

git log -n8 --all --graph
git diff test master  -- readme.cp # 对两个分支指向的最近的commit进行比较
$ git diff HEAD b592328377d3 -- index.html

小结

    1. 对分支进行比较
git diff master test -- index.html

正确的删除文件的方法

rm readme
git rm readme
git reset --hard HEAD
# equal to 
git rm filename

小结

    1. 删除文件 git rm filename
    1. 回复到指定状态
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 # 不保存当前工作的指针地址

小结

    1. 清除当前工作台,将当前工作内容封装
git stash
    1. 进行紧急工作
    1. 紧急工作完成继续当前工作
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

小结

    1. .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上连接到本地修改,然后提交。


相同分支修改不同部分


快速找到感兴趣的项目

    1. git 最好 学习 资料 in:readme stars:>1000
    1. blog easily start in:readme stars:>5000
    1. 'after_script:'+'stage:deploy' filename:.gitlab-ci.yml

搭建一个简洁的blog

    1. fork
    1. config
    1. 添加到post

保证开源项目的质量

    1. fork 项目到本地
  • 2.本地修改
    1. pull request 到源工程
    1. merge 是紫色的,其他是红色的
    1. code review CI检查

组织类型的仓库

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容