初始化仓库:
echo "# demo" >> README.md //新建文件 git init //初始化生成.git文件,通过ls -ah 查看隐藏文件 git add README.md //文件加入暂存区 git commit -m "first commit" //暂存区提交到版本分支上 git remote add origin https://github.com/zxnisjoseph/demo.git //本地仓库和远端仓库进行管理 git push -u origin master //本地代码推送远端
第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令
比如:git push / git push origin master
具体操作:
全局针对项目配置:
$ git config user.name "gitlab's Name"
$ git config user.email "gitlab@xx.com"
$ git config --list
git config --list查看当前配置, 在当前项目下面查看的配置是全局配置+当前项目的配置, 使用的时候会优先使用当前项目的配置
0 状态查看 : git status
查看修改: git diff readme.txt (工作区-->暂存区&& 版本库的区别)
对比版本分支和工作区:git diff HEAD -- readme.txt (版本库 --> 工作区和暂存区的区别)
1 添加操作
a: 添加到暂存区(更新或新增)
git add file1.txt ...
git add -A 提交所有变化
git add -u 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
git add . 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件—正常使用
一个文件修改多次添加到暂存区会自动合并作为一次修改进行提交
b:添加到版本分支
git commit -m "add .."
git commit -am “message” 等价于 git add + git commit
2 撤销移除操作
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file
,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考c,不过前提是没有推送到远程库。
a: 撤销(回到上一个修改动作)
git checkout -- readme.txt
readme.txt
文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
git reset HEAD file: 撤销暂存区的修改回到工作区
b: 从暂存区移除 等价于 撤销场景2
use "git rm --cached <file> <file1>..." to unstage == git reset HEAD file
c:从版本分支上移除:回到指定版本,并更新工作区
回到上一个提交版本,清空工作区和暂存区所有变动:
$ git reset --hard HEAD^
HEAD is now at ea34578 add distributed
如果想切换到其他版本,则可以通过查看每一步的操作历史,获取commit id, 然后再使用命令
git reset --hard commit_id
$ git reflog
ea34578 HEAD@{0}: reset: moving to HEAD^
3628164 HEAD@{1}: commit: append GPL
ea34578 HEAD@{2}: commit: add distributed
cb926e7 HEAD@{3}: commit (initial): wrote a readme file
? reset和 idea中的对比
d: 文件删除:直接工作区删除,然后删除版本区并提交
git rm
删掉,并且git commit
另一种情况是删错了,因为版本库里还有,等价于丢弃修改回到上一步骤即撤销
git checkout -- test.txt
git checkout
其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”
3 查看历史
git log --pretty=oneline (可选) --graph (可选)
: comit 后面的时 commit Id
commit 3628164fb26d48395383f8f31179f24e0882e1e0
Author: Michael Liao <askxuefeng@gmail.com>
Date: Tue Aug 20 15:11:49 2013 +0800
append GPL
分支管理:
dev合并代码到master
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
上面这种情况,没法快速合并,只能试图合并,可能存在冲突;merge完毕后
$ git add readme.txt
$ git commit -m "conflict fixed"
//只有当merge冲突的情况下,可以直接git commit,使用文件里的merge信息,否则必须写备注
git merge --no-ff -m "merged bug fix 101" issue-101
临时解决bug:
git stash 保存工作现场,当前分支回到上一个commit版本
bug修复完毕,返回现场 git stash list
stash@{0}: WIP on dev: 6224937 add merge
,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用git stash apply
恢复,但是恢复后,stash内容并不删除,你需要用git stash drop
来删除;
另一种方式是用git stash pop
,恢复的同时把stash内容也删了:git stash apply stash@{0},单个不需要指明名称
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>
强行删除
推送分支
git push origin dev, 将本地dev分支所有的提交推送到远端,如果分支未创建则先创建
git push 只能用于已经绑定了远程分支的情况,否则不成功
-
查看远程库信息,使用
git remote -v
; -
本地新建的分支如果不推送到远程,对其他人就是不可见的;
-
从本地推送分支,使用
git push origin branch-name
,如果推送失败,先用git pull
抓取远程的新提交; -
在本地创建和远程分支对应的分支,使用
git checkout -b branch-name origin/branch-name
,本地和远程分支的名称最好一致;等价于git fetch + git checkout branch-name,即在某个分支上继续开发 -
建立本地分支和远程分支的关联,使用
git branch --set-upstream branch-name origin/branch-name
; -
从远程抓取分支,使用
git pull
,如果有冲突,要先处理冲突。
禁用快速合并:
git merge --no-ff -m "merge with no-ff" dev
合并分支时,如果可能,Git会用Fast forward
模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward
模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息
标签的使用:
切换对应分支:git tag <name>
就可以打一个新标签 git tag可查看所有tag
$ git log --pretty=oneline --abbrev-commit
6a5819e merged bug fix 101
cc17032 fix bug 101
7825a50 merge with no-ff
6224937 add merge
59bc1cb conflict fixed
400b400 & simple
75a857c AND simple
fec145a branch test
d17efd8 remove test.txt
git tag v0.9 6224937
上面是给指定 commit id 打tag
-
git tag -a <tagname> -m "blablabla..."
可以指定标签信息; -
git tag -s <tagname> -m "blablabla..."
可以用PGP签名标签; -
git show <tagname>
查看标签信息
标签的操作:
-
命令
git push origin <tagname>
可以推送一个本地标签; -
命令
git push origin --tags
可以推送全部未推送过的本地标签; -
命令
git tag -d <tagname>
可以删除一个本地标签; -
命令
git push origin :refs/tags/<tagname>
可以删除一个远程标签。