git学习

配置

设置账号信息

git config --global user.name "Your Name"
git config --global user.email "email@example.com" 

ssh

由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置。为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。

alias配置别名

找到.gitconfig文件,添加alias部分

[user]
    name = Your Name
    email = email@example.com
[alias]
        st = status
        co = checkout
        ci = commit
        br = branch
        rt = remote
        last = log -1 --name-status
        al = log --pretty=format:'%h %cn -%d %s (%cd)' --abbrev-commit -30
        l = log --graph --pretty=format:'%Cred%h%Creset %Cgreen%cn -%C(cyan)%d%Creset %s %Cgreen(%cd)%Creset' --abbrev-commit -30
        ll = log --name-status --graph --pretty=format:'%Cred%h%Creset %Cgreen%cn -%C(cyan)%d%Creset %s %Cgreen(%cd)%Creset' --abbrev-commit -10
[core]
    autocrlf = true
    excludesfile = d:\\Documents\\gitignore_global.txt
[difftool "sourcetree"]
    cmd = 'C:/Program Files (x86)/Beyond Compare 3/BComp.exe' \"$LOCAL\" \"$REMOTE\"
[mergetool "sourcetree"]
    cmd = 'C:/Program Files (x86)/Beyond Compare 3/BComp.exe' \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\"
    trustExitCode = true

常用操作

git init

git status

On branch develop//当前所处分支
Your branch is up-to-date with 'origin/develop'.//up to date表示跟得上潮流,即最新的
nothing to commit, working directory clean

On branch master
Your branch is ahead of 'origin/master' by 17 commits.
  (use "git push" to publish your local commits)//is ahead of表示在远程版本前面,可以push一下
nothing to commit, working directory clean

On branch develop
Your branch is behind 'origin/develop' by 1 commit, and can be fast-forwarded.
  (use "git pull" to update your local branch)
//is behind表示落后远程版本了,并且可以fast forwarded快速合并
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   SXD2-Game/src/com/gamehero/sxd2/gui/endless/EndlessWindow.as


no changes added to commit (use "git add" and/or "git commit -a")

Your branch is behind 'origin/develop' by 1 commit, and can be fast-forwarded.
  (use "git pull" to update your local branch)

git commit

git add test.txt/src文件夹 //将改动添加到暂存区,可以多次执行add命令,然后一次性commit
git add -u 所有修改和添加的都放到暂存区
git commit -m “本次提交的说明备注”

git log

git log 查看提交记录(注意如果输出的log过长,可以输入Q键来退出)
git log 文件名/文件夹 查看某个文件的提交记录
git log -1 查看最近1次的提交日志 可以通过此命令看到当前所处版本的hash值及其它信息
git log --author="<pattern>" 根据提交作者,搜索提交历史 pattern 可以是字符串或正则表达式
git log --pretty=oneline 此参数可以将日志简略为版本号加提交说明
git shortlog 查看每个人的提交记录
git reflog 可以查看所有分支的所有操作记录(包括(包括commit和reset的操作),包括已经被删除的commit记录,git log则不能察看已经删除了的commit记录

分支

创建分支

git branch dev //创建dev分支
git checkout dev //切换分支
git checkout -b dev //也可以合并成一行:创建加切换
git checkout -b feature/endless //在可视化工具中出现文件夹方便管理
git checkout -b branch3 1a222c3//创建branch3分支,从当前分支的第1a222c3节点开始

//把远程的release下的beta1.1版本checkout到本地
$ git branch release/beta1.1 origin/release/Beta1.1
Branch release/beta1.1 set up to track remote branch release/Beta1.1 from origin.

git branch可以查看当前所有分支,其中带*号的是当前分支
git branch -r 查看所有远程分支

个人理解:master分支和dev分支是两个指针,HEAD指向哪个指针,当前代码就在哪个分支。创建新的分支dev时,只是新增加一个dev指针,然后HEAD指向dev。此后,所做的更改就是针对dev这条线移动指针;如果把HEAD切换回master会发现代码还是以前的样子。如果想把dev的覆盖上来,就使用git merge dev。合并完成后,再删除dev分支,就只剩下master了。Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。

HEAD

你现在在哪儿,HEAD 就指向哪儿,所以 Git 才知道你在那儿!不过 HEAD 并非只能指向分支的最顶端(时间节点距今最近的那个),实际上它可以指向任何一个节点,它就是 Git 内部用来追踪当前位置的东东。有的时候HEAD会指向一个没有分支名字的修订版本,这种情况叫”detached HEAD“
比如:
git checkout HEAD~3,进入分离头状态,那么在这个时候git branch new_branch一下,在此处创建一个分支,然后再git checkout new_branch,即可切换到该分支。我感觉分离头状态也就这么用了,就是切换到某个提交处,在该处建立有名的分支。
(注:HEAD^ 表示上一个版本,如果在命令行中提示More,可以把用引号括起来,即HEAD"")

git checkout和git reset

git是一个非常好用的版本控制软件,但是在使用上偶尔会碰到使用git checkout和git reset,这时候就会想说到底要用哪个才是正确的,简单的结论是,除非你清楚知道你在做什么,不然不要使用git reset,大部分的情况都可以不用使用它,它就跟Linux中的rm指令一样,不可以随便乱用,因为一旦使用了就会造成不可还原的影响。

在详细介绍之前首先必须知道什么叫做工作目录、索引和HEAD。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A1rQu3Qn-1571831201081)(AB0127E1E638494EBD65331AB6DD45D1)]

  • 工作目录(Working Tree)是保存目前正在处理档案的目录,Git相关的操作都会在这个目录下完成。
  • 索引(Index)位于工作目录和数据库之间,是为了向数据库提交作准备的暂存区域,又被称为staging area。
  • HEAD是指到现在我们在操作哪一个commit,当我们checkout的时候其实就是移动HEAD就会跳到另外一个commit或branch上了,HEAD被移动的时候会造成工作目录的档案内容改变,所以如果有档案被修改过但是没有commit或stash的档案存在时会不能够移动HEAD,也就是不能使用git checkout。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值