git常用命令
下面是几个专用名词:
- workspace: 工作区
- Index/Stage: 暂存区
- Repository: 仓库区(本地仓库)
- remote: 远程仓库
- file: 文件
- dir: 文件夹,目录
新建代码库
- git init
- git init [project-name]
- 新建一个目录,初始化为git代码库
- git clone [url]
- 克隆整个项目
配置
git的设置文件为 .gitconfig , 他可以在主目录下,也可以在项目目录下;
-
git config --list
- 显示配置列表
-
git config --global user.name "[name]"
git config --global user.email "[email address]"
- 设置提交代码时的用户信息
-
让git记住用户名和密码:
在本地项目文件夹中找到 .git 文件夹,打开里面的 config 文件
添加:``` [credential] helper = store ```
再输入一次用户名密码后就可以保存住了;
增加/删除文件
- git add [file1] [file2]
- 添加指定文件到暂存区
- git add [dir]
- 添加指定目录到暂存区
- git add .
- 添加当前目录的所有文件到暂存区;
- git rm [file1] [file2]
- 删除工作区文件,并将这次删除放入暂存区
- git rm --cached [file]
- 停止追踪文件,但是文件会保存在工作区
代码提交
- git commit -m [messsage]
- 提交暂存区到仓库区
- git commit [file1] [file2] -m [message]
- 提交暂存区的指定文件到仓库区
- git commit -a
- 提交工作区自上次commit之后的变化,直接到仓库区
- git commit -v
- 提交时显示所有的diff信息
git remote
为了便于管理,git要求每个远程主机都必须指定一个主机名,git remote 命令就是用于管理主机名.在克隆版本库的时候,所使用的远程主机自动被命名为origin;
- git remote
- 列出所有的远程主机。比如: origin
- git remote -v
- 查看远程主机的网址。比如: origin git@github.com:jquery/jquery.git(fetch)
- git remote add <主机名>
- 添加远程主机
- git remote rm <主机名>
- 删除远程主机
- git remote rename <原主机名> <新主机名>
- 修改远程主机名
分支
- git branch
- 列出所有的分支
- git branch -a
- 列出所有的本地分支和远程分支
- git branch [branch-name]
- 新建一个分支,但是依然留在当前分支
- git checkout [branch-name]
- 切换到指定分支,并更新工作区
- git checkout -
- 切换到上一个分支
- git merge [branch]
- 合并指定分支到当前分支
- git cherry-pick [commit]
- 选择一个commit,合并进当前分支
- git branch -d [branch-name]
- 删除分支
查看信息
-
git status
- 显示有变更的文件
-
git log
- 显示当前分支的版本历史
-
git log --stat
- 显示commit历史,以及每次commit发生变更的文件
-
git log -follow [file]
git whatchanged [file]
- 显示某个文件的版本历史,包括改文件名;
-
git log -p [file]
- 显示指定文件相关的每一次diff
-
git log -3
- 显示过去的3次提交记录
-
git diff
- 显示暂存区和工作区的差异
-
git diff HEAD
- 显示工作区与当前分支最新commit之间的差异
-
git diff [first-branch] [second-branch]
- 显示两次提交之间的差异
远程同步
- git pull
- 取回远程仓库变化,并与本地分支合并
- git push
- 上传本事指定分支到远程仓库
- git push [remote] --force
- 强行推送当前分支到远程仓库,即使有冲突
- git push [remote] --all
- 推送所有分支到远程仓库
撤销
- git checkout [file]
- 回复暂存区的指定文件到工作区
- git checkout [commit] [file]
- 恢复某个commit的指定文件到暂存区和工作区(撤销某一次提交)
- git checkout .
- 恢复暂存区的所有文件到工作区
- git reset [file]
- 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
- git reset --hard
- 重置暂存区与工作区,与上一次commit保持一致;
- git reset [commit]
- 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
- git reset --hard [commit]
- 重置当前分支的HARD为指定commit,同时重置暂存区和工作区,与指定commit一致
- git reset --keep [commit]
- 重置当前HEAD为指定commit,但报纸暂存区和工作区不变
- git stash
- 暂时将未提交的变化移除,稍后再移入
- git stash pop
- 将git stash移除的变化移入.这个命令不能用在两个差别很大的分支上,否则不但会移入未提交变化,还会合并一些两分支有区别的代码,导致大量的bug,
比如以a分支为基础,创建了b分支,在b分支上做了一些修改,此时git stash.在切换到a分支,这种情况下可以git stash pop.来把在b分支做的修改挪到a分支上;
- 将git stash移除的变化移入.这个命令不能用在两个差别很大的分支上,否则不但会移入未提交变化,还会合并一些两分支有区别的代码,导致大量的bug,
- git revert [commit]
- 撤销某一次提交,并生成一个新的commitId.简单的说就是把某一次添加的代码删除,然后以删除操作当成一次提交生成一个commitId.与git reset [commit] 的区别.比如原来有3次提交,git revert [commit],会生成第四次提交,而git reset [commit],则会变成两次提交;
12 git revert HEAD - 撤销上一次提交,并生成新的commitId;
- 撤销某一次提交,并生成一个新的commitId.简单的说就是把某一次添加的代码删除,然后以删除操作当成一次提交生成一个commitId.与git reset [commit] 的区别.比如原来有3次提交,git revert [commit],会生成第四次提交,而git reset [commit],则会变成两次提交;
submodule
-
git submodule update
- 根据主目录保存的子目录的commit,把子目录的commit对应的代码拉下来;
-
git submodule init
- submodule初始化
-
git submodule update --init
- 将submodule初始化,并把子目录的commit对应的代码拉下来
-
git submodule add 仓库地址 文件路径
- 仓库地址指子模块远程仓库地址,路径指将子模块放置在当前项目下的路径,如果没有会直接创建出来,比如:
git submodule add git@github.com:lifei1016206057/jqfirst.git JqueryFirst
JQueryFirst是子模块在主目录下的路径,之后就是git commit -m "创建submoduel子目录",git push了;
submodule提交的流程,应该是这个样子的:
- 1 确保主项目在wg分支,submodule也在wg分支
- 2 cd进入submodule所在的目录,add + commit + push
- 3 cd进入主项目所在的目录,用git status命令,应该可以看到刚才的submodule有new commit, 然后add + commit + push 昨天发的提交流程,是没有冲突时的情形。
如果有冲突,则流程如下: - 1 确保主项目在wg分支,submodule也在wg分支
- 2 cd进入submodule所在的目录,add + commit + push
- 3 cd进入主项目所在的目录,用git status命令,应该可以看到刚才的submodule有new commit, 然后add + commit + push
- 4 服务器提示冲突,执行命令 git pull, 紧接着执行 git submodule update
- 5 现在,本地所有模块的版本都与服务器版本一致(你刚刚想要提交的版本也被还原了)。 此时,进入到你刚才修改的模块,切换到你想要的版本
- 6 执行步骤3
其他
- git config --global credential.helper store
- 设置默认的用户名,密码
- git rebase
- 合并commit,将多个合并为一个;
- git push --set-upstream origin fuhua
- 本地有一个fuhua分支,远端没有.直接在远端创建一个fuhua分支,并把本地代码提交上去;
- 在vi编辑器中,ESC退出到命令状态, Ins进入编辑状态, shift + q进入编辑状态; wq退出并保存