git 常用命令
创建版本库
-
git init
初始化一个git版本管理仓库(cd到根目录)
如果使用了git init
在第一次提交的时候会出现To git@code.aliyun.com:20891-lf/sfpt.git ! [remote rejected] master -> master (pre-receive hook declined)
错误
git config receive.denyCurrentBranch ignore
从根本解决问题是在初始化一个远程库的时候使用git init --bare
而不再 使用init -
git add file
添加文件到暂存区(被添加的文件必须在项目目录下,只是添加,还没有提交,版本库里面目前还没有这个文件) -
git commit -m "提交注释"
把暂存区的文件提交到当前分支上(每次提交内容需要简单的描述一下,便于以后查看)commit可以一次提交很多文件,所以可以多次add不同的文件
总结:
1. 初始化一个git仓库,使用 git init 命令
2. 添加文件到git仓库分两步 :
· 第一步,使用命令 git add file , 注意,可反复多次使用,添加多个文件
· 第二步,使用命令 git commit ,完成
查看仓库情况
-
git status
可以时刻查看仓库当前的状态(只会显示那些文件被修改) -
git diff file
查看文件被修改的具体细节
版本回退
-
git log
查看厉害提交记录,格式化输出,加上--prety=oneline
参数 -
HEAD
表示当前版本HEAD^
表示上一个版本HEAD^^
表示上上个版本HEAD~100
表示上100个版本 -
git reset --hard HEAD^
表示回退到上一个版本(–hard 后面也可以跟上版本号) -
gir reflog
记录每一次的git 命令
小结:
1、 HEAD 指向的是当前版本,因此可以使用 git reset --hard commit_id 在历史版本之间穿梭
2、 穿梭前使用 git log 查看提交历史,以便确定回退到哪个版本
3、 回到未来版本,用 git reflog 查看命令历史,以便确定回到未来哪个版本
工作区和暂存区
- git版本库最重要的就是称为stage的暂存区,还有git自动创建的第一个分支
master
,以及指向master
的HEAD
管理修改
- git版本管理系统跟踪管理的是修改而不是文件,所以每一 次对文件进行修改之后都需要添加到暂存区,再提交,不然的话分支上是不会有最新修改后的文件的
撤销修改
如果对一个文件进行了修改操作,之后发现这个修改是错误的
-
1、如果还没有提交到暂存区,直接使用
git checkout --file
删掉工作区的修改 -
2、如果已经这句错误代码已经提交到暂存区,先使用
git reset HEAD file
把暂存区的修改撤销到工作区,之后再使用git checkout --file
删掉工作区的修改 -
3、如果这句代码已经commit到分支,直接版本回退
删除文件
-
当删除一个文件的时候,工作区和版本库就不一致了,
git status
会告诉你哪些文件被删除了 -
如果这个文件确实需要删除的话,直接使用
git rm file
并且直接commit
-
如果这个文件是误删的, 因为版本库里面还有这个文件,可以直接使用
git checkout --file
恢复到最新版本
远程库
连接远程库需要在远程库里面添加上SSH 公钥,公钥需要自己在本地生成
git branch –set-upstream-to=origin/master master
跟踪远程mastergit remote rm origin
删除已经配置的远程库信息,重新连接远程库git remote add origin (git地址)
连接到远程库git push -u origin master
把本地库推送到远程库, 第一次推送使用-u
git 不但会把本地的master
的内容推送到远程新的master
里面,还会把本地的master
和远程库的master
关联起来,以后的推送或拉取就可以简化命令 之后的提操作只需要git push origin master
就可以了
从远程库clonegit clone git地址
分支管理
-
git checkout -b dev
加上-b
表示创建并切换,相当于
git branch dev
git checkout dev
两个指令 -
git merge dev
用于合并并且指定到当前分支(把dev分支合并到master上时,必须切换到master分支上再操作) -
合并完成之后可以删除已被合并的分支,使用
git branch -d dev1
小结:
-
查看分支:
git branch
-
创建分支:
git branch name
-
切换分支:
git checkout name
-
创建并且切换:
git checkout -u name
-
合并某分支到当前分支:
git merge --no-ff-m "普通合并" dev
(参数可以不加,默认是Fast forward 合并之后直接删除被合并的分支) -
删除分支 :
git branch -d name
##解决冲突
- 如果两个分支都有了新的提交之后,合并分支的时候回报错(两个人拿到了一样的白纸,画的东西不一样,就会报错)
git status
会告诉我们冲突的文件,手动修改之后,再进行add、commit提交,可以使用git log --graph --pretty=oneline --abbrev-commit
查看分支的合并情况
bug分支
- 当项目已经在运行的时候,出了一个bug,可以创建一个分支来修复它但是手头的代码只写了一半,不能提交
可以使用git stash
把当前的进程存起来,之后把bug分支体检之后,用git stash pop
来恢复之前保存的状态,并且删除掉stash内容,可以使用gir stash list
查看所有的stash,使用git stash apply stash@{0}
恢复到指定stash
featuer分支
-
一个项目如果需要添加新功能,但是不能因为这些没有实质性的代码,把主分支弄乱了,所以添加一个新功能就创建一个feature分支
-
写好之后合并,如果这个新功能在体检之前又被告知被废弃,直接删除这个分支,
git branch -D feature-verson
可以强制删除
多人协作
使用git origin -v
查看远程库信息,-v 更加详细
-
1、可以 试图用
git push origin branch name
推送自己的修改 -
2、如果推送失败,因为远程库比本地的库快一个版本,需要使用
git pull
试图合 -
3、如果合并冲突,解决掉冲突之后提交
-
4、之后使用
git push origin branch name
推送