常用git指令
git reflog 查看所有分支的所有操作记录
git reflog 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)
git add 添加 多余文件
这样的错误是由于, 有的时候 可能
git add . (空格+ 点) 表示当前目录所有文件,不小心就会提交其他文件
git add 如果添加了错误的文件的话
撤销git add 多添加文件
git status 先看一下add 中的文件
git reset HEAD 如果后面什么都不跟的话 就是上一次add 里面的全部撤销了
git reset HEAD XXX/XXX/XXX.java 就是对某个文件进行撤销了
删除commit message
git reset --soft HEAD^ 仅仅是撤回commit操作,您写的代码仍然保留。
git–hard^ 本地修改也没了
git branch -d branch_name 删除本地分支
git branch -D branch_name 强行删除本地分支
git push remote_name --delete branch_name 删除远程分支
看某个提交的修改内容
git show sha1
看某个提交的commit message
git log sha1
一 本地分支
创建本地分支,然后切换到dev分支
$ git checkout -b dev
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
$ git branch dev
$ git checkout dev
然后,用git branch命令查看当前分支:
$ git branch
* dev
master
添加文件 "Readme.txt", 提交到本地dev分支
$ git add Readme.txt
$ git commit -m "branch dev test"
dev分支的工作完成,切换回master分支:
$ git checkout master
把dev分支的工作内容合并到master分支上:
$ git merge dev
git merge命令用于合并指定分支到当前分支。合并后,再查看Readme.txt的内容,和dev分支的最新提交是完全一致的。
Fast-forward信息代表:“快进模式”,直接把master指向dev的当前提交,合并速度快。
并非每次代码合并都能实现Fast-forward。
合并完成后,删除dev分支:
$ git branch -d dev
删除后,查看branch,就只有master分支了:
$ git branch
* master
创建、合并和删除分支非常快,鼓励你使用分支来完成某个短期任务,合并后再删掉,比起直接在master上工作过程更安全。
二 远程分支
删除远程分支
git push origin --delete Chapater6
查看远程分支
git branch -r
拉取远程分支并创建本地分支
git checkout -b 本地分支名x origin/远程分支名x
这样远程仓库中也就创建了一个test分支
git checkout -b test
git push origin test
查看所有分支
git branch -a
注:remote/origin/[name]表示的是远程分支
清除本地更改
// 清楚所有更改
git checkout . && git clean -xdf
// 清除某一个文件的更改
git checkout -- file
git 对比两个分支差异
1. 显示出branch1和branch2中差异的部分
git diff branch1 branch2 --stat
2. 显示指定文件的详细差异
git diff branch1 branch2 具体文件路径
3. 显示出所有有差异的文件的详细差异
git diff branch1 branch2
4. 查看branch1分支有,而branch2中没有的log
git log branch1 ^branch2
5. 查看branch2中比branch1中多提交了哪些内容
git log branch1 .. branch2
注意,列出来的是两个点后边(此处即dev)多提交的内容。
6. 不知道谁提交的多谁提交的少,单纯想知道有是吗不一样
git log branch1...branch2
7. 在上述情况下,在显示出没个提交是在哪个分支上
git log --lefg-right branch1...branch2
注意 commit 后面的箭头,根据我们在 –left-right branch1…branch2 的顺序,左箭头 < 表示是 branch1 的,右箭头 > 表示是branch2的。
git diff a b与git diff b a的区别
git diff a b是基于a来看b有什么变化
git diff用的时间也挺久了,不过一直没有注意过git diff a b,和git diff b a有什么区别,用的也是稀里糊涂的,不就是比较a和b的不同么?两种比较方式会有什么不一样呢?
我们的a文件,内容如下:
1
2
b文件的内容为:
1
3
执行git diff a b,结果为:
diff --git a/a b/b
index 1191247..2b2f2e1 100644
--- a/a
+++ b/b
@@ -1,2 +1,2 @@
1
-2
+3
如果是git diff b a,则结果为:
diff --git a/b b/a
index 2b2f2e1..1191247 100644
--- a/b
+++ b/a
@@ -1,2 +1,2 @@
1
-3
+2
git fetch
fetch Download objects and refs from another repositor
拿来 从另一个存储库获取下载对象和参考
git fetch 并没更改本地仓库的代码,只是拉取了远程 commit 数据,将远程仓库的 commit id 更新为latest。
具体的行为你可以尝试看看.git文件夹:./git/refs 里面有三个文件夹:
heads、remotes、tags。heads 和 remotes 分别记录的就是本地和远程不同仓库的最新 commit id
fetch 改变的是 remotes 里面相应分支的 commit id
git fetch xxx -b name
新建将最新切换到xxx,并新建名字为name的新branch
将本地代码打成patch文件
git commit --amend
git format-patch -1 //不将修改提交到远程服务器上,在根目录下生成patch文件
// 应用patch
git am xxx.patch // 将补丁,提交并在本地创建一个commit.
git apply xxx.patch // 仅对本地文件打补丁,不创建commit.
// 如果git am有问题,可以尝试git apply,再做修改.
git clean
git clean -f //f 强制删除
↑删除当前目录下所有没有track过的文件
创建并切换到新分支
git checkout -b panda
git branch可以看到已经在panda分支上
刪除本地分支
$ git branch -d dev
$ git branch -D dev //强制删除
刪除远程分支
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/branch1
remotes/origin/master
$ git push origin --delete branch1
To git@github.com:frogfans/Demo.git
- [deleted] branch1
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
本地分支推送到远程分支
应用场景
有时候我们开发需要开一个分支,这样可以有效的并行开发.
开分支有两种方式:
一种是在远程开好分支,本地直接拉下来;
一种是本地开好分支,推送到远程.
1、远程先开好分支然后拉到本地
git checkout -b feature-branch origin/feature-branch //检出远程的feature-branch分支到本地
2、本地先开好分支然后推送到远程
$ git checkout -b newbranch //创建并切换到分支newbranch
$ git push origin newbranch:newbranch //推送本地的newbranch(冒号前面的)分支到远程origin的newbranch(冒号后面的)分支(没有会自动创建)
删除当前目录下所有没有track过的文件
不会删除.gitignore文件里面指定的文件夹和文件, 不管这些文件有没有被track过
git clean -f <path>
git add之前,放弃刚刚做的修改
在git add之前我们发现有错误,想要放弃刚刚做的修改,回到修改前的状态
git checkout -- main.cpp
git push 前,branch版本落后
Updates were rejected because the tip of your current branch is behind
解决办法:可以强制推送到远程分支。远程branch落后的commit将被删除
git push -u origin xxxx -f
也有不删除远程commit的解决方案