+ (点击以下标题显示正文内容)
GIT代理设置
位置:~/.gitconfig,例如:C:\Users\Administrator\.gitconfig
内容如下:
[user] name = zollty email = zollty@163.com [http] proxy = http://170.17.18.80:8080 [https] proxy = http://170.17.18.80:8080
+ (点击以下标题显示正文内容)
GIT命令下 文件中文名 乱码问题
下面命令 设置一下就行了:
git config --global core.quotepath false
+ (点击以下标题显示正文内容)
轻量级Clone(只拷贝最近一次的commit历史记录和指定分支)
例如
git clone --depth 1 --single-branch -b 5.3 https://github.com/apereo/cas-overlay-template.git cas-overlay
5.3为分支名称。
+ (点击以下标题显示正文内容)
轻量级clone后,如何单独拉取一个分支?
1、首先建立一个空的空白分支:git checkout --orphan xxx本地分支名
2、然后拉取远程分支:git pull origin xxx远程分支名
+ (点击以下标题显示正文内容)
git 单独拉取某个 tag(没有clone全部,[远端的版本库太大了])
假设远程tag的名字为 temporary,则可以用如下的命令
$ git fetch origin refs/tags/temporary:refs/heads/newbranch
[observe fetch happen; now you have local branch 'newbranch']
然后就可以 git checkout temporary了
另外,如果想查看远程所有的分支、tags,可以用如下命令:
$ git ls-remote
其他方法参见:https://www.cnblogs.com/chucklu/p/4841978.html
+ (点击以下标题显示正文内容)
状态问题:文件没有修改,diff也为空,但却状态却为 modified
解决方案:将modified的文件,执行一次 git checkout xxx,例如:
$ git status On branch master Your branch is up to date with 'origin/master'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: content/26k6ec.txt modified: content/28za6a.txt modified: content/2qc4vc.txt modified: content/33z3vc.txt modified: content/594zzk.txt modified: content/767z4z.txt modified: content/7yy6z5.txt modified: content/884c4z.txt modified: content/8xan8z.txt no changes added to commit (use "git add" and/or "git commit -a") $ git checkout content/* $ git status On branch master Your branch is up to date with 'origin/master'. nothing to commit, working tree clean
另外,我仓库的配置 .git/config 为:
[core] repositoryformatversion = 0 filemode = false bare = false logallrefupdates = true symlinks = false ignorecase = true safecrlf = false autocrlf = false whitespace = cr-at-eol
注意其中的 ignorecase, safecrlf, autocrlf, whitespace 这几个配置。
+ (点击以下标题显示正文内容)
git仓库,删除所有历史记录,成为一个新的干净的仓库
1.切换到新的分支
git checkout --orphan latest_branch
2.缓存所有文件(除了.gitignore中声名排除的)
git add -A
3.提交跟踪过的文件(Commit the changes)
git commit -am "commit message"
4.删除master分支(Delete the branch)
git branch -D master
5.重命名当前分支为master(Rename the current branch to master)
git branch -m master
6.提交到远程master分支 (Finally, force update your repository)
git push -f origin master
7.另开一个文件夹,重新clone仓库,然后用clone后的 .git文件夹,替换掉原来目录下的 .git文件夹
+ (点击以下标题显示正文内容)
同时向多个git仓库提交代码
1、添加一个新地址: git remote add origin_gitlab http://10.2.10.22/3rd_custom/apollo.git
2、往新地址推送代码:git push origin_gitlab master
如果推送失败,则先pull:
git pull origin_gitlab master
如果pull失败,报错 fatal: refusing to merge unrelated histories,则加上一个参数:
git pull origin_gitlab master --allow-unrelated-histories
+ (点击以下标题显示正文内容)
撤销未提交(push)的更改(commit) / GIT还原代码
git log + git checkout
步骤如下:
1、git log查看commit id,找到提前之前的id
如下所示:
$ git log commit 6aeb1823a804d5b154ebdb4a5a293b0731dd7cdb (HEAD -> master) Author: zollty <zollty@163.com> Date: Wed Dec 19 11:26:08 2018 +0800 update pom commit 2477fb81aa5ce01f50f377f7dd6918848e2905c2 (origin/master, origin/HEAD) Author: zollty <zollty@163.com> Date: Sun Apr 15 20:07:14 2018 +0800 update commit ca9b0887698f5b73d5fb3ba8f07ab13214f4f4a9 Author: zollty <zollty@gmail.com> Date: Thu Jan 25 21:12:13 2018 +0800
现在HEAD在第一个的位置,我们找到第二个位置的 id:2477fb81a
2、git reset --hard commit-id,注意参数hard会丢弃修改的文件。
一般情况下,不要加--hard,使用 git reset commit-id 即可。
附:git reset --[soft, hard, mixed(default)] 说明
--soft 只是重置head,更改的文件不会还原,index不会重置,意味着下次commit,不需要再add;
--mixed 意味着,更改的文件不会还原,下次提交需要重新add;
--hard 意味着彻底还原,更改的文件会还原到之前的版本,更改丢失。
+ (点击以下标题显示正文内容)
GIT还原某个文件到之前的版本 / GIT还原代码
git log + git checkout
过程如下:
第1步,得到文件全路径:
$ git status 位于分支 master 修改: src/main/java/cn/stat/AipCall.java
第2步,git log + 文件全路径,得到commit id:
$ git log src/main/java/cn/stat/AipCall.java commit eae91cbd5322f85decfd9c3788636809dea361b2 Author: zollty <zollty@163.com> Date: Tue Sep 6 16:08:53 2016 +0800 commit c13d4ed0289251db11a3abf375179f674a192984 Author: zollty <zollty@163.com> Date: Tue Sep 6 14:31:37 2016 +0800 Initial Commit第3步,git checkout commit id
$ git checkout eae91c src/main/java/cn/stat/AipCall.java
+ (点击以下标题显示正文内容)
Git暂存命令用法
Git暂存命令:当需要拉取远端文件,但又不想提交正在修改的文件时,可以使用git stash 命令将当前的工作区保存(藏匿)起来,等pull 完后再还原。此功能类似于实现了 ‘局部拉取更新’ 。
用法如下:
git stash //暂存修改工作区 git pull //拉取远端文件 git stash pop stash@{0} //将工作区还原
注:如果还原工作区的文件与pull 下来的文件有冲突,则要手动修改冲突。
+ (点击以下标题显示正文内容)
创建一个tag(发布一个版本)
git tag -a v1.1.0.RELEASE -m 'release v1.1.0' git push origin v1.1.0.RELEASE其中 v1.1.0.RELEASE 为 tag name
+ (点击以下标题显示正文内容)
删除tag,重新上传
3)然后在重新执行创建tag的过程
+ (点击以下标题显示正文内容)
操作如下:
git checkout gh-pages // go to the gh-pages branch 切换分支 git rebase master // bring gh-pages up to date with master git pull // pull before push git push origin gh-pages // commit the changes git checkout master // return to the master branch
+ (点击以下标题显示正文内容)
将改动的代码提交到一个新分支上(自动创建)
我在master上改了很多代码,等我commit之后,觉得不能提交到master上,决定提交到另外一个分支,
于是执行下面命令:
$ git push origin branch2
结果报错:src refspec ~ does not match any
解决方案为:
$ git push origin HEAD:branch2
参见:https://stackoverflow.com/questions/26701683/src-refspec-does-not-match-any
+ (点击以下标题显示正文内容)
git 删除远程分支
不小心把本地的临时分支push到server上去了,想要删除。
一开始用 git branch -r -d origin/branch-name
不成功,发现只是删除的本地对该远程分支的track,正确的方法应该是这样:
git push origin :branch-name
冒号前面的空格不能少,原理是把一个空分支push到server上,相当于删除该分支。