Git知识点整合

Git安装

Windows上安装Git
64 位安装包下载地址 : https://github.com/git-for-windows/git/releases/download/v2.16.2.windows.1/Git-2.16.2-64-bit.exe

步骤6 选择第二项
Use Git from the Windows Command Prompt

步骤7 选择第二项
Use the native Windows Secure Channel library

步骤8 选择第一项
Checkout Window-style,commit Unix-style line endings

步骤9 选择第二项
Use Windows' default console window

在对应路径右键调用Git Bash here

安装完git后设置:
$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

(此用户名和邮箱是git提交代码时用来显示你身份和联系方式的,并不是github用户名和邮箱)

查看用户名和邮箱地址
$ git config user.name
$ git config user.email

切换目录,目录最好英文
cd /f/unfishied/git

创建一个空目录
$ mkdir learngit
$ cd learngit
$ pwd
把这个目录变成Git可以管理的仓库
$ git init
在learngit目录或子目录下创建文件
把本地的修改提交到stage
git add [file1] [file2] ... # 添加指定文件到暂存区
git add [dir] # 添加指定目录到暂存区,包括子目录
git add . # 添加当前目录的所有文件到暂存区

git rm [file1] [file2] ... # 删除工作区文件,并且将这次删除放入暂存区
git rm --cached [file] # 停止追踪指定文件,但该文件会保留在工作区

报错信息:
warning: LF will be replaced by CRLF in ......
The file will have its original line endings in your working directory. 解决方法:
git config --global core.autocrlf false
原因是路径中存在 / 的符号转义问题,false就是不转换符号默认是true,相当于把路径的 / 符号进行转义,这样添加的时候就有问题

第二步,用命令git commit告诉Git,把文件提交到仓库:
$ git commit -m "wrote a readme file"
解析:-m 后面输入的是本次提交的说明,

查看查看当前分支有哪些修改
$ git status
查看文件具体的修改内容
$git diff readme.txt
查看当前分支上面的日志信息 --pretty=oneline单行显示
git log --pretty=oneline
查看某个文件的每一行的修改记录()谁在什么时候修改的)
git blame someFile
撤销本地修改
$ git reset --hard HEAD
查看文件内容
$ cat readme.txt
回到未来某个版本 commit id bf2a (版本号写前几位就可以)
$ git reset --hard bf2a
记录你的每一次命令
git reflog

撤销修改
一种是readme.txt修改后还没add,只在工作区
一种是add后被添加到暂存区
回到工作区
git reset HEAD

删除文件
在资源管理器中 删除文件后你有两个选择
使用git rm删除,并且git commit;
另一种情况是删错了, 因为版本库里还有
$ git checkout --test.txt
git checkout其实是用版本库你的版本替换工作区的版本,
无论工作区是修改还是删除,都可以"一键还原"

git stash //把未完成的修改缓存到栈容器中
git stash list //查看所有的缓存
git stash pop //恢复本地分支到缓存状态

发现有一个类是多余的,想删掉它又担心以后需要查看它的代码,想保存它但又不想增加一个脏的提交。这时就可以考虑git stash。

使用git的时候,我们往往使用分支(branch)解决任务切换问题,例如,我们往往会建一个自己的分支去修改和调试代码, 如果别人或者自己发现原有的分支上有个不得不修改的bug,我们往往会把完成一半的代码commit提交到本地仓库,然后切换分支去修改bug,改好之后再切换回来。这样的话往往log上会有大量不必要的记录。其实如果我们不想提交完成一半或者不完善的代码,但是却不得不去修改一个紧急Bug,那么使用git stash就可以将你当前未提交到本地(和服务器)的代码推入到Git的栈中,这时候你的工作区间和上一次提交的内容是完全一样的,所以你可以放心的修Bug,等到修完Bug,提交到服务器上后,再使用git stash apply将以前一半的工作应用回来。

经常有这样的事情发生,当你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态,而你想转到其他分支上进行一些工作。问题是,你不想提交进行了一半的工作,否则以后你无法回到这个工作点。解决这个问题的办法就是git stash命令。储藏(stash)可以获取你工作目录的中间状态——也就是你修改过的被追踪的文件和暂存的变更——并将它保存到一个未完结变更的堆栈中,随时可以重新应用。

远程仓库
C:\Users\Administrator.ssh
1.创建SSH Key,在用户主目录下,看看有没有.SSH目录,再看看目录下有没有
id_rsa(私钥)和id_rsa.pub(公钥)这两个文件

 公钥与私钥使用场景:
 (1)私钥用来进行解密和签名,是给自己用的。
 (2)公钥由本人公开,用于加密和验证签名,是给别人用的。
(3)当该用户发送文件时,用私钥签名,别人用他给的公钥验证签名,可以保证该信息是由他发送的。当该用户接受文件时,别人用他的公钥加密,他用私钥解密,可以保证该信息只能由他接收到。

如果没有
添加ssh key
$ ssh-keygen -t rsa -C "[email protected]"

Account settings-Add SSH Key
在Key 文本框里粘贴id_rsa.pub文件的内容

在GitHub上创建一个远程仓库
Create a new repo
Repository name填入learngit
关联远程库
git remote add origin [email protected]:Carroll9527/learngit.git
Carroll9527替换成自己的Git用户名
远程库的名字就是origin,这是Git默认的叫法
Git name只是展示名, username才是用户名

推送
git push -u origin master
-u参数,git不但会把本地的master分支内容推送新的远程分支,还会把本地
master分支和远程master关联起来,指定orign为默认主机,后面就可以不加
任何参数, 使用git push了

远程分支上存在本地分支中不存在的提交,往往是多人协作开发过程中遇到的问题,可以先fetch再merge,也就是pull,把远程分支上的提交合并到本地分支之后再push。
如果你确定远程分支上那些提交都不需要了,那么直接git push origin master -f,强行让本地分支覆盖远程分支。
强行覆盖
git push origin master -f

推送其他分支
git push origin dev

master分支是主分支,因此要时刻与远程同步;

dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;

bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;

feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

//从远程仓库克隆
$ git clone [email protected]:carroll/gitskills.git

创建合并分支

查看分支:git branch

创建分支:git branch

切换分支:git checkout

创建+切换分支:git checkout -b

合并某分支到当前分支:git merge

删除分支:git branch -d

解决冲突
创建不同分支然后提交
合并分支
git merge feature1
状态
git status
查看readme.txt的内容
<<<,===,标记出不同分支的内容
查看合并的日志情况
git log --graph --pretty=oneline --abbrev-commit
--abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符
普通方式合并
git merge --no-ff -m "merge with no-ff" dev
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

工程进行到一半,没办法提交
git stash 把现工作区存储起来
查看工作现场
git stash list
恢复同时把stash内容删除
git stash pop
如果要丢弃一个没有被合并过的分支,
可以通过git branch -D

查看远程仓库的信息
git remote -v
推送分支
git push origin dev
master分支是主分支,因此要时刻与远程同步;
dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

同步冲突
先指定本地dev分支与远程origin/dev分支的链接
git branch --set-upstream-to=origin/dev dev

多人协作的工作模式通常是这样:

首先,可以试图用git push origin <branch-name>推送自己的修改;

如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

如果合并有冲突,则解决冲突,并在本地提交;

没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to

git diff HEAD 比较的是工作区中的文件与版本库中文件的差异

Rebase
rebase操作的特点:把分叉的提交历史“整理”成一条直线,看上去更直观。缺点是本地的分叉提交已经被修改过了。
git rebase

git diff
(1)当暂存区中没有文件时,git diff比较的是,工作区中的文件与上次提交到版本库中的文件。
(2)当暂存区中有文件时,git diff则比较的是,当前工作区中的文件与暂存区中的文件
git diff HEAD -- file,比较的是工作区中的文件与版本库中文件的差异
git diff --cached 查看已经add但是没有commit的内容

git fetch 和git pull 的差别

1、git fetch 相当于是从远程获取最新到本地,不会自动merge,如下指令:
 git fetch orgin master //将远程仓库的master分支下载到本地当前branch中
 git log -p master ..origin/master 比较本地的master分支和origin/master分支的差别
git merge origin/master //进行合并
也可以用以下指令:
git fetch origin master:tmp //从远程仓库master分支获取最新,在本地建立tmp分支
git diff tmp //將當前分支和tmp進行對比
git merge tmp //合并tmp分支到当前分支

  1. git pull:相当于是从远程获取最新版本并merge到本地
    git pull origin master
    git pull 相当于从远程获取最新版本并merge到本地
    在实际使用中,git fetch更安全一些

创建标签
切换到需要打标签的分支上
git branch
git checkout master
敲命令 git tag

查看标签信息
git show v0.9
如果打错标签,可以删除
git tag -d v0.1
推送标签到远程
git push origin v.0
一次性推送全部尚未推送到远程的本地标签:
git push origin --tags
删除远程标签比较麻烦
先从本地删除
git tag -d v0.9
然后从远程删除
git push origin :refs/tags/v0.9

//使用GitHub
访问开源项目主页
点击Fork 就在自己的账号下克隆了一个bootstrap仓库
然后从自己的账号下克隆
git clone [email protected]:michaelliao/bootstrap.git

猜你喜欢

转载自www.cnblogs.com/Remedy/p/10340803.html