git 常用命令大全

初始化并建立关联:

git init # 初始化本地git仓库

git remote add origin XX # 添加远程仓库地址,并命名为origin

git checkout -b XX # 创建分支XX,并切换至该分支(-b表示创建,如果只切换分支则去掉-b)

git pull origin XX # 拉取远程XX分支

git add . # 将当前目录所有文件(除.gitignore指定的文件外)添加至暂存区

git commit -m XX # 提交更改,消息为XX

git push -u origin XX # 提交至远程仓库指定XX分支,并建立关联

git rm -r --cached . # 清除本地缓存(已经add的)

平时提交:(可用VSCode图形界面)

git add .
git commit -m XX
git push (由于之前已经关联,无需再次指定提交的位置)

提交某一个文件:

git add 当前路径名+文件名

提交某一个文件夹下的所有文件:先切换到该文件夹下,再执行命令

git add ./*

拉取远程分支(如dev)上的内容时若出现refusing to merge unrelated histories错误,可使用

git pull origin dev --allow-unrelated-histories

配置用户信息

git config --global user.name [username]

git config --global user.email [email]

查询用户信息

git config --list

如果push遇到在输入密码后,报错fatal: Authentication failed for

解决办法:

git config --system --unset credential.helper

之后你在push就会提示输入名称和密码

如果每次拉取、推送代码都需要用户名密码时,执行命令:

git config --global credential.helper store

会在~/.gitconfig目录下多出一个文件,这里会记录你的密码和帐号;
再执行git pull 输入一次正确的帐号密码之后就不用再输入了。

如果不小心将某个文件推到了dev,再在ignore里添加忽略策略时不管用,是因为没有去除该文件的版本控制,执行如下命令

git rm -r --cache 文件或文件夹路径


git 撤销,放弃本地修改

 如果在修改时发现修改错误,而要放弃本地修改时,

1. 未使用 git add 缓存代码时。

可以使用 git checkout -- filepathname (比如: git checkout -- readme.md  ,不要忘记中间的 “--” ,不写就成了检出分支了!!)。放弃所有的文件修改可以使用 git checkout .  命令。

此命令用来放弃掉所有还没有加入到缓存区(就是 git add 命令)的修改:内容修改与整个文件删除。但是此命令不会删除掉刚新建的文件。因为刚新建的文件还没已有加入到 git 的管理系统中。所以对于git是未知的。自己手动删除就好了。

2. 已经使用了  git add 缓存了代码。

可以使用  git reset HEAD filepathname (比如: git reset HEAD readme.md)来放弃指定文件的缓存,放弃所以的缓存可以使用 git reset HEAD . 命令。

此命令用来清除 git  对于文件修改的缓存。相当于撤销 git add 命令所在的工作。在使用本命令后,本地的修改并不会消失,而是回到了如(一)所示的状态。继续用(一)中的操作,就可以放弃本地的修改。

3. 已经用 git commit  提交了代码。

可以使用 git reset --hard HEAD^ 来回退到上一次commit的状态。此命令可以用来回退到任意版本:git reset --hard  commitid 

你可以使用 git log 命令来查看git的提交历史。

filename too long

git有可以创建4096长度的文件名,然而在windows最多是260,因为git用了旧版本的windows api

解决方式是:

​git config --global core.longpaths true

Git 本地分支管理

查看、切换、创建和删除分支

git br -r # 查看远程分支

git br <new_branch> # 创建新的分支

git br -v # 查看各个分支最后提交信息

git br --merged # 查看已经被合并到当前分支的分支

git br --no-merged # 查看尚未被合并到当前分支的分支

git co <branch> # 切换到某个分支

git co -b <new_branch> # 创建新的分支,并且切换过去

git co -b <new_branch> <branch> # 基于branch创建新的new_branch

git co $id # 把某次历史提交记录checkout出来,但无分支信息,切换到其他分支会自动删除

git co $id -b <new_branch> # 把某次历史提交记录checkout出来,创建成一个分支

git br -d <branch> # 删除某个分支

git br -D <branch> # 强制删除某个分支 (未被合并的分支被删除的时候需要强制)

 分支合并和rebase

git merge <branch> # 将branch分支合并到当前分支

git merge origin/master --no-ff # 不要Fast-Foward合并,这样可以生成merge提交

git rebase master <branch> # 将master rebase到branch,相当于: git co <branch> && git rebase master && git co master && git merge <branch>

Git补丁管理(方便在多台机器上开发同步时用)

git diff > ../sync.patch # 生成补丁

git apply ../sync.patch # 打补丁

git apply --check ../sync.patch #测试补丁能否成功

Git远程分支管理

git pull # 抓取远程仓库所有分支更新并合并到本地

git pull --no-ff # 抓取远程仓库所有分支更新并合并到本地,不要快进合并

git fetch origin # 抓取远程仓库更新

git merge origin/master # 将远程主分支合并到本地当前分支

git co --track origin/branch # 跟踪某个远程分支创建相应的本地分支

git co -b <local_branch> origin/<remote_branch> # 基于远程分支创建本地分支,功能同上

git push # push所有分支

git push origin master # 将本地主分支推到远程主分支

git push -u origin master # 将本地主分支推到远程(如无远程主分支则创建,用于初始化远程仓库)

git push origin <local_branch> # 创建远程分支, origin是远程仓库名

git push origin <local_branch>:<remote_branch> # 创建远程分支

git push origin :<remote_branch> #先删除本地分支(git br -d <branch>),然后再push删除远程分支

创建远程仓库

git clone --bare robbin_site robbin_site.git # 用带版本的项目创建纯版本仓库

scp -r my_project.git git@ git.csdn.net:~ # 将纯仓库上传到服务器上

mkdir robbin_site.git && cd robbin_site.git && git --bare init # 在服务器创建纯仓库

git remote add origin git@ github.com:robbin/robbin_site.git # 设置远程仓库地址

git push -u origin master # 客户端首次提交

git push -u origin develop # 首次将本地develop分支提交到远程develop分支,并且trackgit remote set-head origin master # 设置远程仓库的HEAD指向master分支

git remote 远程仓库管理

git remote # 列出 remote 仓库别名

git remote -v # 查看远程服务器地址和仓库名称

git remote show origin # 查看远程服务器仓库状态

git remote add [alias] [url] # 添加远程仓库地址,如 git remote add origin git@ github:robbin/robbin_site.git

git remote set-url [alias] [url] # 设置远程仓库地址(用于修改远程仓库地址),如 git remote set-url origin git@ github.com:robbin/robbin_site.git

git remote rm <repository> # 删除远程仓库

git remote rename [old-alias] [new-alias] # 重命名.

其他命令

ls -a #找到目录下.git
rm -rf .git #删除 git 本地存储及隐藏文件夹
git clone git地址 #将远程仓库中的代码克隆到本地
git status 查看相关文件的状态
git status -s 来查看简写的状态,M - 被修改,A - 被添加,D - 被删除,R - 重命名,?? - 未被跟踪
git push -u -f origin XX - 强制覆盖至远程分支
git help <command> # 显示command的help
git show # 显示某次提交的内容 git show $id
git co -- <file> # 抛弃工作区修改
git co . # 抛弃工作区修改
git add <file> # 将工作文件修改提交到本地暂存区
git add . # 将所有修改过的工作文件提交暂存区
git rm <file> # 从版本库中删除文件
git rm <file> --cached # 从版本库中删除文件,但不删除文件
git ci <file> git ci . git ci -a # 将git add, git rm和git ci等操作都合并在一起做
git ci -am "some comments"
git ci --amend # 修改最后一次提交记录
git revert <$id> # 恢复某次提交的状态,恢复动作本身也创建次提交对象
git revert HEAD # 恢复最后一次提交的状态

git log 查看提交记录

git log git log <file> # 查看该文件每次提交记录
git log -p <file> # 查看每次详细修改内容的diff
git log -p -2 # 查看最近两次详细修改内容的diff
git log --stat #查看提交统计信息
git log --oneline --number # 每条log只显示一行,显示number条
git log --oneline --graph # 可以图形化地表示出分支合并历史
git log branchname #可以显示特定分支的log
git log --oneline branch1 ^branch2 # 查看在分支1,却不在分支2中的提交.^表示排除这个分支(Window下可能要给 ^branch2 加上引号)
git log --decorate # 会显示出 tag 信息
git log --author=[author name] # 指定作者的提交历史
git log --since --before --until --after # 根据提交时间筛选log,--no-merges可以将merge的commits排除在外
git log --grep # 根据commit信息过滤log: git log --grep=keywords,默认情况下, git log --grep --author是OR的关系,即满足一条即被返回,如果你想让它们是AND的关系,可以加上--all-match的option
git log -S # filter by introduced diff,比如: git log -SmethodName (注意S和后面的词之间没有等号分隔).
git log -p # 每一个提交都是一个快照(snapshot),Git会把每次提交的diff计算出来,作为一个patch显示给你看,另一种方法是git show [SHA]
git log --stat # 同样是用来看改动的相对信息的,--stat比-p的输出更简单一些.

git diff 查看文件diff

​git diff # 比较工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容
git diff --cached # 查看已经暂存起来的文件和上次提交时的快照之间的差异
git diff --staged # (Git 1.6.1 及更高版本还允许使用 git diff --staged,效果是相同的,比较暂存区和版本库差异)
git diff HEAD # 比较woking directory和上次提交之间所有的改动.
git diff [version tag] # 查看自从某个版本之后改动的内容 
git diff --stat # 仅仅比较统计信息
git diff [branchA] [branchB] # 可以用来比较两个分支,返回一个由A到B的patch
git diff [branchA]…[branchB] # 查看两个分支分开以后各自的改动内容,实际上它是 git diff $(git merge-base [branchA] [branchB]) [branchB]的结果

​

git commit

     提交已经被add进来的改动.

​
git commit -m “the commit message"
git commit -a 会先把所有已经track的文件的改动add进来,然后提交(有点像svn的一次提交,不用先暂存). 对于没有track的文件,还是需要git add一下
git commit --amend 增补提交. 会使用与当前提交节点相同的父节点进行一次新的提交,旧的提交将会被取消.

​

git reset

这里的HEAD关键字指的是当前分支最末梢最新的一个提交,也就是版本库中该分支上的最新版本

git reset <file> # 从暂存区恢复到工作文件
git reset -- . # 从暂存区恢复到工作文件
git reset --hard # 恢复最近一次提交过的状态,即放弃上次提交后的所有本次修改
git reset HEAD # 这个命令用来把不小心add进去的文件从staged状态取出来,可以单独针对某一个文件操作: git reset HEAD - - filename, 这个- - 也可以不加
git reset --soft # move HEAD to specific commit reference, index and staging are untouched.

     不带soft和hard参数的git reset,实际上带的是默认参数mixed

git revert

反转撤销提交.只要把出错的提交(commit)的名字(reference)作为参数传给命令就可以了.

git revert HEAD #撤销最近的一个提交.

git revert #会创建一个反向的新提交,可以通过参数-n来告诉Git先不要提交.

git rm

git rm file: 从staging区移除文件,同时也移除出工作目录.
git rm --cached: 从staging区移除文件,但留在工作目录中.
git rm --cached从功能上等同于git reset HEAD,清除了缓存区,但不动工作目录树.

git clean

git clean # 从工作目录中移除没有track的文件;
git clean -df:

     -d表示同时移除目录,-f表示force,因为在git的配置文件中, clean.requireForce=true,如果不加-f,clean将会拒绝执行.

git mv

​
git rm - - cached orig; mv orig new; git add new

​

git stash 暂存管理

git stash # 暂存;
git stash list # 列出该暂存所有 list;
git stash apply # 恢复暂存的内容;
git stash drop # 删除暂存区,即删除上一个,也可指定参数删除指定的一个项目;
git stash clear # 删除所有项目。

git branch

git branch #显示所有本地分支,当前分支会被星号标示出;
git branch -D branchname #删除目录分支,分支名称 branchname;
git branch -u origin/addFile #建立当前分支与远程分支的映射关系 或使用 git branch --set-upstream-to origin/addFile;
git branch -v #可以看见每一个分支的最后一次提交;
git branch (branchname) #创建一个新的分支(当你用这种方式创建分支的时候,分支是基于你的上一次提交建立的);
git push (remote-name) :(branch-name): delete a remote branch #删除 remote 的分支,这个是因为完整的命令形式是 git push remote-name local-branch:remote-branch而这里local-branch的部分为空,就意味着删除了remote-branch。

git checkout

git checkout (branchname) #切换分支;
git checkout -b (branchname) #创建并切换新的分支,这个命令是将git branch newbranch和git checkout newbranch合在一起的结果;
git checkout --<filename> #使用HEAD中的最新内容替换掉工作目录中的文件,已添加到暂存区的改动以及新文件都不会受到影响,注意:git checkout filename会删除该文件中所有没有暂存和提交的改动,这个操作是不可逆的

git merge

git merge [alias]/[branch] # 把远程分支merge到当前分支

如果出现冲突,需要手动修改,可以用git mergetool

解决冲突的时候可以用到git diff,解决完之后用git add添加,即表示冲突已经被resolved.

git tag

当运行git tag -a命令的时候,Git会打开一个编辑器让你输入tag信息

git tag v1.0 # 会在一个提交上建立永久性的书签,通常是发布一个release版本或者ship了什么东西之后加tag;
git tag -a v1.0 # -a参数会允许你添加一些信息;
git tag -a v0.9 XXXX # 我们可以利用commit SHA来给一个过去的提交打tag,在Git中,每个commit ID的信息就是一个SHA-1 Hash值,它是对那个commit是Git仓库中内容和头信息(Header)的一个校验和(checksum)。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值