以下命令都是平常工作中使用频率较高的命令,也是git的一些基本用法,其中[]内的参数表示可以省略,<>内的参数只是示例,具体名称视自己的项目而定,实际命令中不带<>,表示远程主机名,等表示分支名。

1.git配置 获取本机ssh key:

  1. ssh-keygen -t rsa -C "<yourEmail@example.com>"
  2. 配置全局nameemail
  3. git config --global user.name "<yourName>" <br /> git config --global user.email "<yourEmail@example.com>"

2.clone项目到本地

  1. git clone <[http://yourGitAddress.git>](http://yourGitAddress.git>)
  2. git clone -b <分支名> <url>

3.查看工作区状态 git status

4.git add

  1. 将某个文件或文件夹添加到暂存区: <br /> git add <file_name.txt>/<path>
  2. 将当前目录所有修改添加到暂存区(不包括忽略文件): <br /> git add .
  3. 将<path>内的所有已跟踪文件的修改添加到暂存区(省略path表示当前目录): <br /> git add -u [<path>]
  4. 将<path>内的所有已跟踪文件的修改和未跟踪文件添加到暂存区(省略path表示当前目录): <br /> git add -A [<path>]
  5. 查看<path>中已修改但未提交的文件,并通过子命令进行控制(省略path表示当前目录): <br /> git add -i [<path>]

5.git commit

  1. 提交所有改动并编写日志: <br /> git commit -m "<改动日志说明>"

6.git pull

  1. 下拉指定主机的指定分支,并与本地的指定分支合并: <br /> git pull <origin> <远程master>:<本地master>
  2. 下拉指定主机的指定分支,并与本地的当前分支合并: <br /> git pull <origin> <master>

7.git push

  1. 推送本地指定分支到指定远程主机的指定分支上: <br /> git push <origin> <本地master>:<远程master>
  2. 推送本地指定分支到远程同名分支上,如果远程没有同名分支,则会新建同名分支: <br /> git push <origin> <本地master>
  3. 推送空的分支到远程指定分支,相当于删除远程分支: <br /> git push <origin> :<远程master>
  4. 推送当前分支到指定主机的指定分支: <br /> git push <origin> HEAD:<远程master>
  5. 推送当前分支到指定主机的同名分支: <br /> git push <origin> HEAD
  6. 推送本地分支到远程同名分支上,并建立追踪关系(建立追踪关系后可直接使用git push推送): <br /> git push -u <origin> <master>
  7. 推送本地所有分支到指定主机上: <br /> git push --all <origin>

8.git branch

  1. 查看分支列表: <br /> git branch [--list]
  2. 查看本地和远程所有分支: <br /> git branch -a
  3. 新建分支: <br /> git branch <next>
  4. 删除远程分支: <br /> git push <origin> --delete <next>
  5. 删除分支(当前分支不能在被删除的分支上): <br /> git branch -D <next>

9.git merge

  1. 合并某个分支到当前分支下,并自动进行新的提交: <br /> git merge <next>
  2. 合并某个分支到当前分支下,不进行新的提交: <br /> git merge --no-commit <next>
  3. 合并master分支和next分支到当前分支顶部: <br /> git merge <master> <next>

10.git checkout

  1. 切换到<master>分支的head版本: <br /> git checkout <master>
  2. 取出当前分支的tag_name版本: <br /> git checkout <tag_name>
  3. 放弃指定分支对file_name的修改: <br /> git checkout <master> <file_name.txt>
  4. 在当前分支上创建新分支并将工作区设置为该分支上: <br /> git checkout -b <next>

11.git reset

  1. 回退文件,将文件从暂存区回退到工作区: <br /> git reset [HEAD] <file_name.txt>
  2. 向前回退多个版本: <br /> git reset HEAD~n
  3. 回退到指定某个版本: <br /> git reset <commit_id>
  4. 将版本库软回退n个版本,所谓软回退表示将本地版本库的头指针全部重置到指定版本,且将这次提交之后的所有变更都移动到暂存区: <br /> git reset --soft HEAD~n
  5. 将版本库回退n个版本,将本地版本库的头指针全部重置到指定版本,且会重置暂存区,即这次提交之后的所有变更都移动到未暂存阶段: <br /> git reset [--mixed] HEAD~n
  6. 将版本库回退n个版本,但是不仅仅是将本地版本库的头指针全部重置到指定版本,也会重置暂存区,并且会将工作区代码也回退到这个版本: <br /> git reset --hard HEAD~n

12.git rm

  1. 删除git仓库管理系统以及本地中的某个文件: <br /> git rm <file_name.txt>
  2. 删除git仓库管理系统以及本地中的某个文件夹: <br /> git rm -r <path>
  3. 删除git仓库管理系统中的文件,但是保留本地文件: <br /> git rm --cached <file_name.txt>

13.git mv

  1. 移动某个文件到指定文件夹下: <br /> git mv <file> <path>
  2. 重命名某个文件: <br /> git mv <file_name> <new_file_name>

14.git rebase

  1. 把当前分支衍合到指定分支上: <br /> git rebase <master>
  2. 如果有冲突需要先解决冲突,解决完冲突之后执行: <br /> git rebase --continue
  3. 放弃本次衍合操作: <br /> git rebase --abort
  4. 直接使用master分支取代此分支 <br /> git rebase --skip

git pull origin master与git pull —rebase origin master的区别

区别:

  1. git pull=git fetch + git merge
  2. git pull --rebase=git fetch+git rebase

示例:

现在有两个分支:test和master,假设远端的master的代码已经更改了(在B基础上变动:C,E),test的代码更改了要提交代码(在B基础上变动:D,E),如下图:

  1. D--E test
  2. /
  3. A---B---C---F--- master

问题就来了,如果C,F和D,E的更改发生冲突,那么就需要我们合并冲突了,下面我们来看看git merge和git rebase怎么合并的。
git merge:

  1. D--------E
  2. / \
  3. A---B---C---F----G--- test, master

git rebase:

  1. A---B---D---E---C‘---F‘--- test, master

对比可看出:
git merge多出了一个新的节点G,会将远端master的代码和test本地的代码在这个G节点合并,之前的提交会分开去显示。
git —rebase会将两个分支融合成一个线性的提交,不会形成新的节点。

rebase好处

  1. rebase好处
  2. 想要更好的提交树,使用rebase操作会更好一点。
  3. 这样可以线性的看到每一次提交,并且没有增加提交节点。
  4. merge 操作遇到冲突的时候,当前merge不能继续进行下去。手动修改冲突内容后,add 修改,commit 就可以了。
  5. rebase 操作的话,会中断rebase,同时会提示去解决冲突。
  6. 解决冲突后,将修改add后执行git rebase continue继续操作,或者git rebase skip忽略冲突。

———————————————————————————————————————————————————
原文链接:https://blog.csdn.net/a_kevin/article/details/80994783