Git 笔记

git - 简易指南: 链接真的是一个简易指南,但是Git大部分需要使用的操作都在这个里面了。5分钟就能学会99%Git常用的命令。

Git教程: 链接稍微详细一点的Git指南。让你能够理解git并使用它。是上面简版的一个说明。

自己学习git中遇到的问题笔录。我主要以我自己创建的: https://github.com/luchenqun/GitTest.git 为案列。

强制推送。

我在GitHub上建立远程仓库之后,想把本地的推送上去,发生了跟1类似的错误。使用强推,即利用强覆盖方式用你本地的代码替代git仓库内的内容git push -f解决问题。 链接

忽略某些文件,但是已经提交到远程端。

刚学git时,一股脑吧所有文件全部加到版本管理中,现在做Android开发,这样做就有很大的问题了,gen 和bin 文件夹下的文件是编译生成的,最好不要加到版本管理中,最好加入到.gitignore文件中(这两个文件夹要留,只是把文件夹下的文件移除版本管理库)可是,我已经加入到了版本管理中,怎么办?使用git rm raindow -r -f 删除远程端(raindow 是目录),再commit即可。以后再提交的时候就没问题了。

如何删掉github上面建好的项目。

一、点击进入你要删除的repository,如下图,点击右侧的Settings;

二、在该Repo的Settings页面最下方有Delete this repository 按钮,点击;

三、在弹出的对话框中输入你的repository的名字,确认删除;

四、最后一步,点击下方的按钮完成删除;链接

如何重命名远程分支

重命名远程分支其实流程是:删除远程分支–>重命名本地分支–>将重命名的分支推送到远程分支。假设我要将远程分支lcq改为feature-lcq。

首先,删除远程分支:git push –delete origin lcq

然后,重命名本地分支:git branch -m lcq feature-lcq

最后,将重命名的本地分支推送到远程分支: git push origin feature-lcq

如何合并远程分支

首先,将远程分支更新到本地。使用 git fetch origin + 分支名(如果使用 git fetch 将会将所有分支更新到本地)

然后,切换到需要合并的分支。比如,需要将develop分支合并到master分支下。那么首先切换到master分支。然后在master分支下执行git merge origin/develop

如何将远程代码直接覆盖本地代码。

有的时候,我在两个地方编程。比如我在家里写了一些代码推送到远程之后到办公室接着写,这个时候,办公室有一份代码比远程旧。但是我知道,我不需要进行合并,直接将远程的覆盖本地的即可,这时候可以用这个命令:git fetch && git reset –hard origin/master

如何将本地代码push到github上。

首先,在目录下面执行git init,初始化一个仓库。接着按照之前的一样,将代码提交到本地仓库(git add -A, git commit -m “”)。

然后,执行git remote add origin git@github.com: YouGithubName/ RepositoryName.git (将红色字体换成你的Github账号以及项目名字)

最后,执行git push -u origin master,他会有个错误提示:ERROR: Repository not found…….主要原因是你没有在Github上没有创建 RepositoryName 的项目。只要登录Github网站,创建一个项目(注意,名字要跟上面第二步的一样),再执行第三步,你的项目就会提交到GitHub上了。如果进行第三步的时候提示这样的错误:error: failed to push some refs to……。那是因为你远程仓库中代码版本与本地不一致冲突导致的。可以先git fetch,再执行git merge origin/master进行合并。合并完成之后再push即可。参考资料: 链接链接2

如何进行版本的回退。

首先,使用git log可以查看你所有的commit的记录。有的时候,使用git log查看会显示很多行显示很乱。这个时候你可以使用git log –pretty=oneline。这样显示出来的都是整整齐齐的一行,每一行有两列,第一列是提交id(commit id),第二列是你提交的信息。

根据你提交的信息,使用git reset –hard commitId(请将commitId换成自己的实际字符串)即可以将你现在的版本回退到你想要回退的版本。值得一提的是,commitId不需要你写完整,你只要复制commitId前面的一部分,git就会自动帮你去匹配,如果匹配出来有歧义,git会有提示。

如何修改已经commit的信息。

有的时候,commit之后觉得有些信息写错了或者有些信息没有写,这时可以使用 git commit amend命令回退到最近一次commit 的信息的编辑界面。由于是在vim界面编辑的,退出的话参考以下命令。参考 链接1链接2

Git去将来。

有的时候,我们需要看之前的版本,使用git reset –hard (commitId)回退到前面的某个版本之后,做完一些指定的工作,我们又要在这个版本回到相比于当前的版本的将来去。这时候你使用git log,这个版本之后的log你是看不到的,看不到log,你就找不到commitId,没有commitId,你就没法回到将来去。幸好Git提供了一个git reflog的命令,它将你所有的操作都记录下来了。每个操作之前,他都提供了这个commitId,有了这个commitId,我们就可以在Git的过去,现在,未来自由穿梭了。

Windows下设置Git默认编辑器。

比如,你要设置NotePad++为默认编辑器,可以这样:git config –global core.editor “‘C:/Program Files/Notepad++/notepad++.exe’ -multiInst -notabbar -nosession -noPlugin”

是的,你没看错,是的,需要为编辑器的路径单独添加引号,否则配置不会成功。

每次git push 都需要输入账号跟密码

从github上clone下来的代码,每次push的时候,都提示输入账号密码。经查询,原来是使用了HTTPS的方式。只要改成SSH的方式即可。操作方式如下所示:

首先使用git remote -v命令,你会见到如下的链接

origin https://github.com/luchenqun/GitTest.git (fetch)

origin https://github.com/luchenqun/GitTest.git (push)

然后,使用git remote rm roigin,删掉上面的远程链接(这个时候你再使用git remote -v就会看不到任何内容了)

最后,重新设置SSH的远程链接。git remote add origin git@github.com:luchenqun/GitTest.git( 参考链接

当然,也可以再https里面加入账号跟密码。(暂没找到方法)

让 git 忽略掉文件权限检查

有时 git diff 执行显示文件内容没变化,但是有 old mode xxx new mode

原因是文件的权限,被 chmod 变化了,这种变化也被 diff 识别出来了

让 git 忽略掉文件权限检查: git config core.fileMode false

在GIT中创建一个空分支

使用 git checkout的–orphan参数:

git checkout –orphan doc

该命令会创建一个名为doc的分支,并且该分支下有前一个分支下的所有文件。

查看–orphan的帮助:

Create a new orphan branch, named <new_branch>, started from and switch to it. The first commit made on the new branch will have no parents and it will be the root of a new history totally disconnected from all the other branchs and commits.

这里的start point指的是你执行git checkout命令时的那个分支,当然新的分支不会指向任何以前的提交,就是它没有历史,如果你提交当前内容,那么这次提交就是这个分支的首次提交。

查看git分支的创建者

git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' | sort -k5n -k2M -k3n -k4n

git diff 技巧

  • git diff filepath 工作区与暂存区比较
  • git diff HEAD filepath 工作区与HEAD ( 当前工作分支) 比较
  • git diff –staged 或 –cached filepath 暂存区与HEAD比较
  • git diff branchName filepath 当前分支的文件与branchName 分支的文件进行比较
  • git diff commitId filepath 与某一次提交进行比较
  • git diff commitId commitId –numstat 查看更新了哪些

将所有分支更新到最新

git branch | awk 'BEGIN{print "echo ****Update all local branch...@daimon***"}{if($1=="*"){current=substr($0,3)};print a"git checkout "substr($0,3);print "git pull --all";}END{print "git checkout " current}' | sh

您的支持将鼓励我继续创作!
0%