前言:
先来一图,方便查询。下面就是基本上囊括常用的git命令,可以当做速查表
六个常用命令
(继续上个图,这个图记住基本工作就没啥问题。)
Git add 命令
git add . :监控工作区的状态树,会把工作时的所有变化提交到暂存区,这里面包括文件内容修改(modified)以及新文件(new),但唯独不包括被删除的文件;
git add -u/–update :只是监控已经被add的文件(tracked file),会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file);
git add -A/–all :上面两个功能的合集
git add . 保存新的添加和修改,但是不包括删除
git add -u 保存修改和删除,但是不包括新建文件。
git add -A 保存所有的修改 //即保存上述两个操作
git init
echo Change me > change-me
echo Delete me > delete-me
git add change-me delete-me
git commit -m initial
echo OK >> change-me
rm delete-me
echo Add me > add-me
git status
# Changed but not updated:
# modified: change-me
# deleted: delete-me
# Untracked files:
# add-me
git add .
git status
# Changes to be committed:
# new file: add-me
# modified: change-me
# Changed but not updated:
# deleted: delete-me
git reset
git add -u
git status
# Changes to be committed:
# modified: change-me
# deleted: delete-me
# Untracked files:
# add-me
git reset
git add -A
git status
# Changes to be committed:
# new file: add-me
# modified: change-me
# deleted: delete-me
全局配置账号信息:
git config --global user.email youremail
git config --global user.user yourname
Git commit 命令
将暂存区内容添加到本地仓库中。
git commit [这里可以写指定文件] -m [message]
//[message] 可以是一些备注信息
git commit
//直接这样会出现文本编辑器给你编辑内容
git commit -a
//-a 参数设置修改文件后不需要执行 git add 命令,直接来提交
//提交流程一般就是git add / git commit 这样,也可以快捷
git commit --amend //这个是在 commit -m之后想要修改注释的操作(未push上去时操作才有用)
Git init 命令
用于在目录中创建新的 Git 仓库。
//在目录中执行 git init 就可以创建一个 Git 仓库了。
git init
//再用ls -al 就会出现。git文件,这个文件主要配置了一些参数
//当然,好像也可以直接git clone ,这样就不要git init
Git push 命令
用于将本地分支的更新,推送到远程主机。
git push <远程主机名> <本地分支名>:<远程分支名>
git push <远程主机名> <本地分支名>
//本地分支名与远程分支名相同,则可以省略冒号:
//删除远端分支
git push origin :master 等同于 git push origin --delete master
//就是把本地的空分支推到远端的master分支,删除远端master分支
//建立远端分支
git push origin master:test
//就跟普通的push一样,只不过远端会建立test分支(如果该分支不存在的话)
git push -u origin master
//如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push
git push origin HEAD:master
//HEAD代表你现在所指向的分支,比如你git clone下来一个项目,里面有很多分支,你切换到别的分支,然后修改后向提交到别的分支
//那么如果你再push,是没有用的,会出现这种情况
//$ git push
//fatal: You are not currently on a branch.
//To push the history leading to the current (detached HEAD)
//state now, use
// git push origin HEAD:<name-of-remote-branch>
Git pull 命令
用于从远程获取代码并合并本地的版本。
git pull <远程主机名> <远程分支名>:<本地分支名>
git pull origin master
//远程分支(master)要与当前分支合并,则冒号后面的部分可以省略。上面命令可以简写:
git clone
拷贝一个 Git 仓库到本地,让自己能够查看该项目,或者进行修改。
git clone [url]
//clone整个仓库
//clone单个分支
git clone git_仓库_url //获取全部branch内容
git clone -b 远端分支名 git_仓库_url //指定分支
git clone -b 远端分支名 --single--branch git_仓库_url //获取指定分支的代码
git clone --depth 10 git_仓库_url //只会获取最近 xx(10条提交记录的)代码,默认是master分支, 如果想要指定分支,可以结合 -b --single--branch 使用!
Git 建立、切换分支 命令
列出所有本地分支
git branch
列出所有远程分支
git branch -r
列出所有本地分支和远程分支
git branch -a
新建一个分支,但依然停留在当前分支
git branch [branch-name]
新建一个分支,并切换到该分支
git checkout -b [branch]
新建一个分支,与指定的远程分支建立追踪关系
git branch --track [branch] [remote-branch]
建立追踪关系,在现有分支与指定的远程分支之间
git branch --set-upstream [branch] [remote-branch]
合并指定分支到当前分支
git merge [branch]
选择一个commit,合并进当前分支
git cherry-pick [commit]
删除分支
git branch -d [branch-name]
Git remote 命令
跟远端的仓库进行连接
git init
vim README.md
git add README.md
git commit -m "first commit"
git remote add origin url
git push -u origin master
上面的步骤适用于远程的仓库没什么文件,是个空的才行,如果已经有文件存在了,是不行的,当你git push是会出现下图情况:
解决方法:
方法1:强行将代码推到github仓库里面去(推荐,省时省力)
git push -f origin master:master //直接强推,即利用强覆盖方式用你本地的代码替代github仓库内的内容
方法2:
出现(non-fast-forward)的根本原因是repository已经存在项目且不是你本人提交
(我知道是大概率你提交的,但是git只认地址),你commit的项目和远程repo不一样。
这时该怎么办呢?很简单,把远端项目拉回本地:
git pull
然而pull回来之后,你再push依旧会fail。
原因是他们是两个不同的项目,要把两个不同的项目合并,不能简单的git pull。而是
git pull origin master:master --allow-unrelated-histories
这条命令允许了不同项目的合并。
好了,pull成功了。
接下来
git push origin master:master
上述方法2来自此处,请点击!
Git撤销命令
git checkout [file]
//恢复暂存区的指定文件到工作区,他会把暂存区的文件覆盖到你原先的文件
//就是我先git add test.txt
//然后我又在工作区该百年test.txt文件内容,此时git checkout test.txt,会把我更改的内容覆盖
git checkout . //恢复暂存区当前目录的所有文件到工作区
git checkout [commitid] //恢复工作区到指定 commit
git reset [file] //重置暂存区的指定文件,与上一次 commit 保持一致,但你的工作区文件是不变的,哪怕你修改了也是不变的,跟checkout是不一样的
git reset --hard //重置暂存区与工作区,与上一次 commit 保持一致,这个可以达到git checkout的效果
git reset [commit] //重置当前分支的指针为指定 commit,同时重置暂存区,但工作区不变
git reset --hard [commit] //重置当前分支的HEAD为指定 commit,同时重置暂存区和工作区,与指定 commit 一致
git revert [commit] //新建一个 commit,用于撤销指定 commit
Git stash 命令
git stash //将未提交的变化放在储藏区
git stash save "xxxx" //增加标识字符串
git stash pop //将储藏区的内容恢复到当前工作区,并删除
git stash pop --index stash@{$num} //其中xxx可以通过git stash list 进行查看 --index stash@{0}
git stash list //查看放置在stash的内容,stash的性质有点像stack
git stash clear // 删除所有缓存的 stash。
git stash drop stash@{$num} //移除stash里面的内容
git stash apply stash@{0} //应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即 stash@{0}
Git fetch 命令
git fetch <远程主机名> //这个命令将某个远程主机的更新全部取回本地
如果只想取回特定分支的更新,可以指定分支名:
git fetch <远程主机名> <分支名> //注意之间有空格
最常见的命令如取回origin 主机的master 分支
git fetch origin master
取回更新后,会返回一个FETCH_HEAD ,指的是某个branch在服务器上的最新状态,我们可以在本地通过它查看刚取回的更新信息:
git log -p FETCH_HEAD
返回的信息包括更新的文件名,更新的作者和时间,以及更新的代码
然后我们可以通过这些信息来判断是否产生冲突,以确定是否将更新merge到当前分支。
Git merge命令
假设现有分支develop、test。需要将test合并到develop分支。
首先git checkout develop。
git merge test
test分支会合并到develop,会有test分支提交信息,同时最后一条提交会是Merge branch 'test' into develop。
git merge test --no-commit
test分支会合并到develop,会有test分支提交信息,最后一条提交与test分支一致。
git merge test --squash
test分支会合并到develop,没有test分支提交信息,需要自行git commit。
上面这段来自此处,链接:https://www.jianshu.com/p/c778e88fd57a
Git删除远程文件命令
命令模板:git rm -r --cached + 文件路径
输入命令如:
$ git rm -r --cached xxxx
输入上面命令会提示如下:说明删除成功
rm ‘xxx’
接下来git commit ----> git push