git安装即基本操作

2020-03-17  本文已影响0人  锅炉工的自我修养

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 官网

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

3. 注册github账号

image.png

sign up 注册,sign in 登录

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

https://desktop.github.com/

github 客户端

5. 文本编辑器


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'

小结


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

小结


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

小结

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

每日总结

git config user.name 'zyj'
git config user.email 'xx@xx.com'
git init reps_name
git add file_name # 提交到寄存区
git add -u #全部提交
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
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

小结


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

小结


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

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

小结

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

小结

git reset HEAD -- filename1 filename2

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

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

小结

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 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

小结



多人协作修改

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


相同分支修改不同部分


快速找到感兴趣的项目


搭建一个简洁的blog


保证开源项目的质量


组织类型的仓库

上一篇 下一篇

猜你喜欢

热点阅读