git常用命令

git init

初始化一个 Git 仓库,它将创建一个 .git 文件夹,后续的操作记录都会在此文件夹里,相当于 Git 的数据库。

git remote add origin 远程仓库地址

将本地仓库和远程仓库关联,origin 是远程仓库的名字,是 Git 的默认叫法。关联之后,我们就可以将本地的提交历史推送到远程仓库,完成和其他人的协同工作了。

git remote -v

查看关联的远程仓库列表,返回远程仓库名和 URL:

1
2
git remote -v
origin https://github.com/schacon/ticgit (fetch)

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 rebasegit merge 两个命令都⽤于从⼀个分⽀获取内容并合并到当前分⽀。

以一个 feature/todo 分⽀合并到 master主分⽀为例,我们来看一下分别⽤ rebasemerge 会有什么不同。

使用 Merge

merge 会⾃动创建⼀个新的 commit, 如果合并时遇到冲突的话,只需要修改后重新 commit

  • 优点:能记录真实的 commit 情况,包括每个分⽀的详情

  • 缺点:由于每次 merge 会⾃动产⽣⼀个 merge commit

    因此在使⽤⼀些可视化的 git 工具时会看到这些自动产生的 commit

    这些 commit 对于程序员来说没有什么特别的意义,多了反而会影响阅读

使用 Rebase

rebase 会合并之前的 commit 历史。

  • 优点:可以得到更简洁的提交历史,去掉了 merge commit
  • 缺点:因为合并而产生的代码问题,就不容易定位,因为会重写提交历史信息

建议

  • 当需要保留详细的合并信息,建议使⽤ git merge, 尤其是要合并到 master 上
  • 当发现⾃⼰修改某个功能时提交比较频繁,并觉得过多的合并记录信息对自己来说没有必要,那么可尝试使用 git rebase