分支操作 1、clone当前项目 $ git clone https://git.oschina.net/simingtu/test123.git
2、创建分支 $ git checkout -b dev
3、查看本地当前分支情况 $ git branch 绿色为当前所在的分支
4、在dev分支上修改a.txt
5、将修改提交到dev分支 git add a.txt git commit -m ‘branch test’ 6、将分支的修改合并到主干上去 首先要切换到主分支上去:git checkout master 然后合并:git merge dev 这样分支的修改就合并到了master上去了。
7、撤销git add 当修改了多个文件之后,使用git add . 就把当前所有修改的文件都添加进去了。那么此时如果想撤销某个文件怎么办呢? 方法1:全部撤销:git reset HEAD 方法2:撤销单个文件:git reset HEAD xxx.txt
8、将单个文件恢复到指定版本 使用git log a.txt 查看文件的提交记录,然后找到你要恢复到的版本,比如版本号为:xxxxxx git checkout xxxxxx a.txt
10、强制恢复到远程的版本 有时候我们就像快速的使用远程的版本怎么办?我们本地提交的东西在pull之后发现冲突了,此时我们只要使用一个命令即可使用远程的版本了。 打开冲突的文件,看到其最新的版本号:
如上图所示,划红线的就是远程的最新版本号,那么此时我们只要使用如下的命令即可: git reset --hard 远程版本号的前六位即可,也就是: git reset --hard 994190 这样就强制使用了远程的版本,你的所有的修改都要重新来过。其实你还可以回到自己之前的那个版本,那就是使用git reflog命令,查看之前的那次修改的内容。 如下: git reflog 查看你要回去的版本号,然后使用git reset --hard 版本号就可以了。反正只要知道版本号,你想回到哪里就回到哪里,特别有用的命令。
11、git查询远程仓库地址 git remote -v
12、查看远程分支(包括本地) git branch -a 这里列出了所有的分支情况,包括本地和远程的分支。
13、在10中我们学习了如何强制使用远程的最新版本 那个前提条件是知道远程的最新版本号,我们存了个疑问如何获取远程的最新版本号呢?这里给出一个方法,两条命令: git fetch git log remotes/主机名/分支名,如git remotes/origin/master 讲解: git fetch 拉取远程所有版本提交记录到本地,如果你想拉取某个分支,则可以使用git fetch origin master git remotes/主机名/分支名 事实上是查看.git下面的文件信息,比如经过git fetch之后,在.git目录下有如下的文件:
画红色底线的是最新的版本号。其实我们可以直接打开上述的那个文件也可以看到最新版本号:
有了这个版本号,那么我们就可以直接使用: git reset --hard 版本号,就可以获取远程的最新版本了。
14、checkout的使用 如果我们在13的最后使用的是如下的命令: git checkout 版本号,那么此时我们就会有如下的提示:
此时我们在使用git status查看下状态:
我们同样在用git branch看下当前所在的分支: 发现我们已经不在master分支了,此时我们我们怎样合并上面checkout下来的最新版本到master分支呢? 可以这样做: git checkout master git merge 版本号 如下:
这样就把最新的版本合并到了master分支,并且当前处于master分支了。 这里学会了checkout/merge/branch等命令。
15、删除本地分支 git branch -D 分支名 首先看看本地有哪几个分支,使用命令git branch -a 由图可以看出,凡是以remotes开头的都是远程服务器的分支。除外则是本地分支。 上图本地分支只有一个就是master。 此时我们可以为远程创建一个分支,如下命令: git branch dev 为本地创建分支dev git push origin dev 将本地分支推送到远程服务器 然后使用命令git branch -D dev即可删除本地分支。 另外注意,如果本地所在分支就是dev,那么需要切换到其他分支,才能删除dev。
16、删除远程分支 git push origin --delete dev
17、创建分支 git branch xxx
18、切换分支到xxx git checkout xxx
19、创建并切换到xxx分支 git checkout -b xxx
20、查看分支 git branch 查看本地分支 git branch -r 查看远程分支 git branch -a 查看本地+远程分支
21、切换到远程分支 git fetch + git checkout xxxx git checkout -b xxx origin/xxx
-b master2 是在本地创建master2分支,然后后面是要切换的master2分支。 上面的命令可以分解为: git checkout -b master2 然后是: git pull origin master2
22、创建本地分支,并推送到远程指定分支 当前是在master分支,本地和远程只有一个master分支。 创建本地分支dev1,并推送到远程分支dev1 这样远程就有了一个基于maste创建的另外一个分支dev1了。
23、拉取远程的分支到本地 首先要创建对应的本地分支,然后再拉取。
上面的三步可以合并为:
24、如何查看当前分支是由哪个分支创建的 git reflog show 分支名
25、查看当前分支在什么时候创建的 git reflog show --date=local dev1 git reflog show --date=relative dev1 git reflog show --date=iso dev1
26、git checkout .的作用 比如我们的文件删除了,那么一个方法是恢复到远程版本。另外一个方法是git checkout .重新检出。
27、add了文件,但是又想删除,git reset HEAD 比如:修改了一个文件a.txt
然后我们add了此文件: 此时我们想去除这个a.txt文件: git reset HEAD a.txt
如果是很多文件,则直接使用git reset HEAD
28、删除未跟踪的文件和文件夹: git clean -ndf -n列出将要删除的文件或者文件夹 -d删除文件夹 -f删除文件 -x包含删除ignore中的文件,不常用。 然后是删除:
29、回到远程的最新版本 git reset --hard HEAD git fetch git pull 这样就回到了远程的最新版本了
30、回到指定的版本 git fetch git log remotes/origin/master git reset --hard 版本号
31、git fetch之后发生了什么 要查看远程的分支情况,需要先fetch远程的分支信息到本地: 然后在remotes下的origin下多了远程的分支信息。 这个文件是可以打开的,其实就是头文件的HEAD号:
32/我今天想模拟的是 1/提交了A版本 2/提交了B版本,修改了xxx文件,但是是错误的 3/提交了C版本 那么怎么讲xxx文件恢复到A中的版本,并且不要revert C版本。
33/git add 的撤销 使用git reset HEAD 这是撤销所有的git add .
撤销单个文件的add git reset HEAD xxxx
33/git commit的撤销 git reset --soft HEAD 这个–soft是保留你的修改,但是撤销了commit操作
34/git push的撤销 git reset --soft 7246e634cd7294a3182239ff49df841354fe4d4c 回到某个版本,保留自己的提交和33有点类似
35/强制推送本地版本 git push -f origin master 或者 git push --force origin master 或者 git push origin master --force
36/忽略.ignore的使用 文件为:
vi打开,输入内容: e.txt abc/ 意思忽略掉e.txt和abc/下的所有文件 ok。此时如果e.txt或者是abc/从来没有提交过,则理解生效。
但是如果e.txt和abc/提交过,那么则次忽略文件失效,此时需要使用: git rm --cached e.txt 和 git rm -r --cached abc/ 这样之后,使e.txt和abc/不在被跟踪 然后提交: git commit -m"移除e.txt和abc/文件夹下的跟踪" git push origin master
然后你再对e.txt和abc/下的文件修改都不会再有修改状态的提示了,此时忽略成功。
37、git clean -df 删除untrack的文件,或者文件夹。
38、git show commitId 查看指定commit hashID的所有修改: git show commitId
39、git restore --staged xxx 撤销添加的git add xxx
40、git unlink of file 原因是,其他程序占用了某个文件,比如我unity打开的时候,读取了某个文件,同时你又想用git pull,此时会出现下面的报错。 解决方法,停止运行unity即可。 41、git pull时遇到error: cannot lock ref ‘xxx’ https://blog.csdn.net/qq_15437667/article/details/52479792
git pull -p
原因是你这个git工程的.git/refs目录下跟踪的某些git分支,在git pull的时候,与远端的对应分支的refs对比发现不同,所以导致git pull报错。
通常产生这个问题的原因是(以分支git/yousa/feature_01为例):
有人操作git/yousa/feature_01这个分支,在git push的时候使用了git push –force,(当然这个人的git push是push不上去),导致远端分支被覆盖,你本地的refs与远端无法一致,导致问题 git分支是不区分大小写的,如果有人删除掉这个远端分支又重新新建了一个这个分支也会出现同样的问题。
解决方法: 删除有问题的refs,可以直接在.git/refs下面根据错误提示删除对应的refs文件,比如这个就是需要删除refs/remotes/origin/git/yousa/feature_01文件(嫌麻烦直接删除整个refs目录也行) 使用git命令删除相应refs文件,git update-ref -d refs/remotes/origin/git/yousa/feature_01 简单粗暴强行git pull,执行git pull -p
42、git diff xxxx文件名,看不同。
