git使用
git常用命令
git init
初始化一个 Git 仓库,它将创建一个 .git 文件夹,后续的操作记录都会在此文件夹里,相当于 Git 的数据库。
git remote add origin 远程仓库地址
将本地仓库和远程仓库关联,origin 是远程仓库的名字,是 Git 的默认叫法。关联之后,我们就可以将本地的提交历史推送到远程仓库,完成和其他人的协同工作了。
git remote -v
查看关联的远程仓库列表,返回远程仓库名和 URL:
1 | git remote -v |
git status
显示当前工作目录和暂存区的状态,例如创建了一个文件,此时 git status 就会在 Untracked files 里显示该未追踪的文件,如果将该文件 add 了之后,就会在 Changes to be committed 看到,即已经加到缓存区,等待提交。最后,当我们 commit,就会发现没有任何修改和未提交的文件了。
git add [file] 、git add .
用于将已修改或未跟踪的文件添加到暂存区
git commit -m “提交日志”
将暂存区的文件提交到本地仓库
git log –oneline
查看提交的日志信息
git diff
查看工作区的文件和暂存区的不同之处
git push origin <本地分支名>
将本地的分支推送到 origin 远程仓库的上,第一次推送远程仓库将会在服务器上创建对应的分支,当第一次推送完后,后续可以直接使用 git push 这种简介用法了
git pull
将远程仓库的最新内容合并到本地仓库里
git merge <其他分支名>
将其他分支里的提交内容合并到当前分支里
git merge –abort
合并是有可能有冲突的,如果冲突后想放弃合并,可以使用这个命令
git branch 分支名称
创建新的分支
git checkout 分支名称
切换到其他分支上
git checkout -b 新分支名称
相当于上面连个命令的合体功能,即创建新分支,然后切换到新分支上。
git branch、git branch -r、git branch -a
分别是查看本地分支、查看远程分支、查看所有分支
1git branch -d 分支名称
删除分支,如果该分支没有合并过,则会提示相应错误,如果想要强制删除,可使用 git branch -D
分支名称
git clean -f
删除本地仓库中未跟踪的文件,如果想删除的是目录,使用 -d
git reset
用于重置暂存区的文件与上一次的提交(commit)保持一致,但不会重置工作区的修改,需使用 git checkout <文件名>
命令才能重置工作区的改动。或者使用比较危险的 git reset --hard HEAD
命令,会将工作区和暂存区都重置到上一次版本,包括 commit 信息。
git rm 文件、git rm –cached 文件名
如果只是简单的在工作目录里手动删除文件,则还需要自己将修改添加到暂存区,然后再提交到本地仓库里才完成一次改动版本的记录。git rm 文件
则帮我们在删除的同时,也将修改添加到了暂存区,少了一步的操作。
但有时候我们想保留该文件,以便后续使用,但又想把删除的改动添加到暂存区,此时就可以使用 git rm --cached 文件名
命令来达到此效果了。
git stash 和 git stash pop
如果我们开发到一半,需要重新创建一个新分支去解决线上问题,但此时又不想将当前的分支改动提交到对应分支上,则可以使用 git stash 将修改(包括工作区和暂存区)保存到堆栈中,等新分支处理完毕后,就可以切换到之前的分支,然后使用 git stash pop
恢复缓存的堆栈内容了。
git提交时发生冲突如何解决?
冲突怎么产生的
开发过程中,我们都有自己的特性分支,所以冲突发生的并不多,但也碰到过。诸如公共类的公共方法,我和别人同时修改同一个文件,他提交后我再提交就会报冲突的错误。
如何解决冲突
1、发生冲突,在IDE里面一般都是对比本地文件和远程分支的文件,然后把远程分支上文件的内容手工修改到本地文件,然后再提交冲突的文件使其保证与远程分支的文件一致,这样才会消除冲突,然后再提交自己修改的部分。特别要注意下,修改本地冲突文件使其与远程仓库的文件保持一致后,需要提交后才能消除冲突,否则无法继续提交。必要时可与同事交流,消除冲突。
2、发生冲突,也可以使用命令。通过git stash命令,把工作区的修改提交到栈区,目的是保存工作区的修改;通过git pull命令,拉取远程分支上的代码并合并到本地分支,目的是消除冲突;通过git stash pop命令,把保存在栈区的修改部分合并到最新的工作空间中;
如果本次提交失误,如何撤销
如果想撤销提交到索引区的文件,可以通过gitresetHEADfile。如果想撤销提交到本地仓库的文件,可以通过gitreset–softHEAD^n,恢复当前分支的版本库至上一次提交的状态,索引区和工作空间不变更。
通过gitreset–mixedHEAD^n恢复当前分支的版本库和索引区至上一次提交的状态,工作区不变更。
通过gitreset–hardHEAD^n恢复当前分支的版本库、索引区和工作空间至上一次提交的状态。
git和svn有什么区别
- git是分布式版本控制,svn是集中式版本控制(核心区别)
- git相对于svn的优势就是不需要网络即可版本控制
- git把内容按数据方式存储,而svn是按文件
- git可以是公用的,可以分享,svn基本是公司内部才能访问,网外不方便访问
- git不依赖中央服务器,即使服务器有问题也不受影响,svn依赖服务器,一旦服务器有问题就会受影响
- git没有一个全局的版本号,svn有
分布式和集中式的区别:
每个节点的地位都是平等,拥有自己的版本库,在没有网络的情况下,对工作空间内代码的修改可以提交到本地仓库,此时的本地仓库相当于集中式的远程仓库,可以基于本地仓库进行提交、撤销等常规操作,从而方便日常开发
git fetch、git merge、git pull的区别
git pull相当于git fetch和git merge,即更新远程仓库的代码到本地仓库,然后将内容合并到当前分支。 git merge:将内容合并到当前分支 git fetch相当于是从远程获取最新版本到本地,不会自动merge 方便记忆: git pull=git fetch+git merge
Git的rebase和merge的区别是什么?
git rebase
和 git merge
两个命令都⽤于从⼀个分⽀获取内容并合并到当前分⽀。
以一个 feature/todo
分⽀合并到 master
主分⽀为例,我们来看一下分别⽤ rebase
和 merge
会有什么不同。
使用 Merge
merge
会⾃动创建⼀个新的 commit
, 如果合并时遇到冲突的话,只需要修改后重新 commit
。
优点:能记录真实的
commit
情况,包括每个分⽀的详情缺点:由于每次
merge
会⾃动产⽣⼀个merge commit
,因此在使⽤⼀些可视化的 git 工具时会看到这些自动产生的
commit
,这些
commit
对于程序员来说没有什么特别的意义,多了反而会影响阅读
使用 Rebase
rebase
会合并之前的 commit
历史。
- 优点:可以得到更简洁的提交历史,去掉了
merge commit
- 缺点:因为合并而产生的代码问题,就不容易定位,因为会重写提交历史信息
建议
- 当需要保留详细的合并信息,建议使⽤
git merge
, 尤其是要合并到 master 上 - 当发现⾃⼰修改某个功能时提交比较频繁,并觉得过多的合并记录信息对自己来说没有必要,那么可尝试使用
git rebase