git命令大全

 

初始化仓库:

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>可以删除一个远程标签。

 

转载于:https://my.oschina.net/zengxiaoning/blog/1595396

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值