一.git的基本使用
0.知识点:
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
版本库中,包含一个暂存区stage和Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
0.Linux操作命令大全
cat ~/.ssh/id_rsa.pub (查看内容)
clip < ~/.ssh/id_rsa.pub (把内容复制到粘贴板)
cd F:\work (切换)
pwd (查看当前目录,确保目录名不包含中文)
1.配置阶段
(0)ignore文件
在仓库跟目录下创建名称为".gitignore"的文件,写入不需要的文件夹名或文件
gen
bin
.gradle
(1)git config(配置用户名和邮件地址)
git config --global user.name 'liujian'
git config --global user.email 'liujian@webull.com'
(2).生成秘钥
ssh-keygen -t rsa -C "abcd@efgh.com" //邮箱同上
(3).查看秘钥并提交
cat ~/.ssh/id_rsa.pub
到github网页中登陆自己的账号,然后再account setting中,找到SSH KEY讲复制的密钥加入(需要再次输入github的密码)
(4).检测是否连接上github
ssh git@github.com
2.git init(创建新的仓库)
cd f
mkdir hello
cd hello
git init
touch hello.java //生成hello.java
3.提交操作到本地版本库
(1)git add(将文件修改添加到暂存区)
git add hello.java
(2)git commit(提交更改,将暂存区的所有内容提交到当前分支,默认提交到master分支)
git commit -m 'liujian commit'
4.查看操作
(1).git status(查看工作区文件的当前状态)
git status-s (加-s以获得简单的结果输出)
??:表示未添加
A: 表示已添加,且文件无改动
AM:文件在我们将它添加到缓存之后又有改动
(2).git diff 查看工作区改变内容(add之前)
git diff -- cached 比较git add和git commit之间的区别
git diff hello.java 查看hello.java工作区改变内容(add之前)
git diff HEAD -- hello.java > f:\xx.txt
跟git show一样,查看某一个提交的提交内容,HEAD表示最新一次commit也可以改成某一次的commitId
>符号把当前内容拷贝到xx.txt文件中
git diff origin/2720(查看远程库中2720分支与当前分支的不同的地方)
(3).git show (最新的commit)
git show commitId(提交id)
查看某一个提交的提交内容(与上一个提交的不同地方)
(4).git log(查看提交信息:提交commit_id,author,提交date)
(5).git reflog(查看git命令历史)
5.撤销命令:
(1)add前(丢弃工作区的修改):checkout
git checkout -- hello.java(把hello.java在工作区的修改全部撤销,--很重要)
两种情况:
①把hello.java自修改后还没有放到暂存区,撤销修改就回到和版本库一模一样的状态
②把hello.java修改后放到缓存区后,又做了修改,未add,撤销修改就回到添加到缓存区后的状态
(2)add后(撤销掉暂存区的修改,重新回到工作区):reset
git reset HEAD hello.java
(3)commit后:
版本回退:
git log(查看提交的版本信息,每一个信息对应一个commit_id)
git reset --hard commit_id
git reset --hard HEAD^(HEAD^表示reset到上一次提交)
--mixed(默认的方式,回退到某个版本,保留本地代码,回退commit和index信息)
--soft(回退到某个版本,只回退了commit的信息,不会恢复到index file一级)
--hard(彻底回退到某个版本,本地源码也会变为上一个版本的内容)
(4)push后:git revert
git revert HEAD 撤销前一次 commit
git revert HEAD^ 撤销前前一次 commit
git revert commitid
git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去
(5)文件删除:git rm(将文件从版本库和工作区中删除,并且需要git commit将文件从服务端删除)
git rm hello.java
git rm --cached hello.java (工作目录保留该文件,删除版本库中的内容)
6.远程操作:
(1)git remote add origin git@github.com:superLjian/test.git
把一个已有的本地仓库与远程服务器关联,远程库的名字就是origin
(2)git clone [url](拷贝一个git项目到本地)
git clone git@github.com:superLjian/simplegit.git
(3)git push
git push origin master(提交本地master分支到远程master分支,远程若没有master会自动创建一个master分支)
git push -u origin master(-u参数,把本地的master分支跟远程的master分支关联起来)
git push origin master_bendi:master (把本地的master_bendi分支中的内容push到远程的master分支)
git push origin master:null (null删除远程的master分支)
(4)git fetch(下拉远程分支)
git fetch origin master:master_bendi
git merge master_bendi(合并master_bendi分支到当前分支)
(4)git pull origin master(下拉远程分支并与本地分支合并)
git pull origin master:master_bendi
把远程主机名为origin的master分支pull到本地的master_bendi分支
(5)查看远程库信息
git remote
git remote -v(-v显示更详细的信息)
9.解决冲突(建议使用as执行该步骤)
pull命令或者merge命令都可能存在冲突的可能,这个时候需要修改文件解决冲突后再提交
10.标签管理
(1)当前版本,打一个新的标签
git tag v1.0
(2)查看所有的标签
git tag
(3)给之前的版本,打一个新的标签
git log(查看获取到提交版本对应的commit id)
git tag v0.9 commitid
(4)查看标签信息
git show v1.0
(5)删除标签
git tag -d v1.0
8.分支管理
(0)分支管理
基本原则:master分支应该是非常稳定的,用来发布新版本,平时不在上面干活
dev分支是不稳定的,干活都在dev分支上,到版本发布时,再把dev分支合并到master上,在master分支上发布1.0版本
(1)创建分支并切换(继续先commit)
git checkout -b dev
(-b表示创建并切换)
git branch dev(创建分支dev,并把当前分支的内容拷贝到分支dev)
git checkout dev(切换当前分支为dev)
创建本地分支与远程分支之间的联系
git checkout -b dev origin/master (在本地创建分支dev连接服务器的分支master)
git checkout dev -track origin /master (在本地创建分支dev连接服务器的分支master,-track可以改写成-t)
git branch --set-upstream mydevv origin/2720 (建立本地分支与远程分支之间的关联)
(2)查看当前和远程分支
git branch
git branch -r
git branch -vv (查看本地分支,并与远程库的分支的对应情况,ahead表示提前,behind落后)
git remote show origin(查看远程库origin里的资源)
git remote (远程库信息)
(3)切回到master分支
git checkout master
(4)合并分支
git merge dev(如果当前分支是master,把dev分支中的内容合并到master分支)
(5)删除分支
git branch -d dev
git branch -D dev(强制删除一个dev分支,某些不能删除的情况下)
(6)git stash
git stash:
git stash pop:从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。可能有多个Stash的情况,pop会从最近的一个stash中读取内容并恢复
git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
git stash clear:清空Git栈
当前工作区内容已被修改,但是并未完成。这时候需要checkout到另外一个分支。可是我又不想提交目前的修改,因为修改没有完成。但是,
不提交的话,又没有办法checkout到前面的分支。此时用Git Stash就相当于备份工作区了。然后在Checkout过去修改,就能够达到保存当前工作区,
并及时恢复的作用。
使用'git stash'就可以将你当前未提交到本地(和服务器)的代码推入到Git的栈中,