git常用命令及技巧

强推,即利用强覆盖方式用你本地的代码替代git仓库内的内容

git push -f



git fetch --prune  #这样就可在本地删除在远程不存在的branch

man git-fetch

  --prune

      After fetching, remove any remote tracking branches which no longer exist on the remote.

  -t, --tags

      Most of the tags are fetched automatically as branch heads are downloaded, but tags that do not

      point at objects reachable from the branch heads that are being tracked will not be fetched by

      this mechanism. This flag lets all tags and their associated objects be downloaded.

#另外,关于git branch的几个命令

git branch     # 查询本地存在的branch

git branch -r  # 查询远程的branch

git branch -a  # 查询本地和远程branch

git branch -d -r origin/todo  #删除远程的todo branch



git tag -l | xargs git tag -d    #delete local tag(s)

git fetch vgt --prune   #fetch from remote repo

#查询远程heads和tags的命令如下:

git ls-remote --heads origin

git ls-remote --tags origin

git ls-remote origin





git commit:

git commit --amend 撤销上一次提交


git push:

git push [remote-name] [master] 推送数据到远程仓库 

git push origin :[branch-name] 删除远程分支.


git diff:

git diff --name-only 73a79c 2d49d2 查看两个版本中间改动过的文件列表

git diff : workspace and index file.

git diff HEAD: workspace and commint

git diff --cached: index file and commit


git fetch:

git fetch [remote-name] 取回远程仓库的所有提交信息


git clone:

git clone [url] 获取远程仓库的 master 分支


git log:

git log -1 HEAD 显示最后一次提交信息

git log -p 显示每次提交的内容差异, 可加参数 -num 显示最近num次提交差异

git log --stat 仅显示增改行数统计.

git reflog 查看rest, checkout 等操作纪录. git log --pretty=oneline 用一行显示每次提交信息.

git log --pretty=fuller 额外显示提交日期.

git log --since=2.weeks 显示最近两周修改

git log --pretty=format:"%h - %an, %ar : %s"


选项 说明

%H 提交对象(commit)的完整哈希字串

%h 提交对象的简短哈希字串

%T 树对象(tree)的完整哈希字串

%t 树对象的简短哈希字串

%P 父对象(parent)的完整哈希字串

%p 父对象的简短哈希字串

%an 作者(author)的名字

%ae 作者的电子邮件地址

%ad 作者修订日期(可以用 -date= 选项定制格式)

%ar 作者修订日期,按多久以前的方式显示

%cn 提交者(committer)的名字

%ce 提交者的电子邮件地址

%cd 提交日期

%cr 提交日期,按多久以前的方式显示

%s 提交说明


git checkout:

git checkout -- <file> 撤销对文件file的修改

git checkout -b branch-name 创建并切换到分区.


git branch:

git breanch -d branch-name 删除分支.

git branch -D branch-name 强制删除分支.

git merge master 合并主分支到当前分支.


git remote:

git remote 列出当前项目的远程库 

git remote -v 显示当前项目对应的克隆地址 

git remote add [shortname] [url] 添加远程仓库 

git remote show [remote-name] 查看远程仓库的详细信息 

git remote [remote-old-name] [remote-new-name] 修改远程仓库名称

git remote rm [remote-name] 删除远程仓库


git reset:

git reset HEAD <file> 撤销已经被暂存(git add)的文件


git reset --soft: 撤销并回退 commit, 不影响 index file, 撤销到哪个位置由最后一个参数指定. git reset --soft HEAD^ 

git reset --hard: 撤销 commit, index file and workspace

git reset --mixed: 默认选项, 撤销 commit and index file, 只保留workspace. 

git reset --: 删除登记在 index file 里的某个文件.


git show-branch:

+(加号)表示所在分支包含此行所标识的commit

(空格)表示所在分支不包含此行所标识的commit

-(减号)表示所在分支是经过merge得到的,而所在行的内容即是merge的基本信息。

*(星号)表示如果需要在某列标识+(加号),且此列为当前分支所在列,那么则将+(加号)转变为*(星号)。


git:

git gc 收缩空间

git count-objects -v 查看占用空间大小.


git恢复删除文件

git 创建分支恢复文件步骤:


git branch [recover-branch]

git checkout [recover-branch]

git checkout master

git branch -D recover-branch


要查看删除的文件: git ls-files �Cdeleted

恢复则需要从新checkout: git checkout �C <deleted_file>

多个文件同时操作可以使用xargs

git ls-fies -d | xargs git checkout --


git checkout -f 恢复删除文件


忽略提交某些文件或文件夹

1. 在 .gitignore 文件内写入文件名或目录名即可忽略提交, 但只对只对没有被 track 的文件或目录有效, 对于已经加入版本管理的文件是无效的.


2. 已经加入版本管理的文件或目录可使用如下命令忽略:


git update-index --assume-unchanged PATH


常见问题

1. 执行 git remote add origin... 时出现错误: fatal: remote origin already exists.

执行如下指令后再git remote add origin... :


git remote rm origin




git stash : Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作

git stash list


工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:

一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

另一种方式是用git stash pop,恢复的同时把stash内容也删了




Git常用操作命令:

1) 远程仓库相关命令

检出仓库:$ git clone git://github.com/jquery/jquery.git

查看远程仓库:$ git remote -v

添加远程仓库:$ git remote add [name] [url]

删除远程仓库:$ git remote rm [name]

修改远程仓库:$ git remote set-url --push [name] [newUrl]

拉取远程仓库:$ git pull [remoteName] [localBranchName]

推送远程仓库:$ git push [remoteName] [localBranchName]

 

*如果想把本地的某个分支test提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test的分支,如下:

$git push origin test:master         // 提交本地test分支作为远程的master分支

$git push origin test:test              // 提交本地test分支作为远程的test分支

 

2)分支(branch)操作相关命令

查看本地分支:$ git branch

查看远程分支:$ git branch -r

创建本地分支:$ git branch [name] ----注意新分支创建后不会自动切换为当前分支

切换分支:$ git checkout [name]

创建新分支并立即切换到新分支:$ git checkout -b [name]

删除分支:$ git branch -d [name] ---- -d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想强制删除一个分支,可以使用-D选项

合并分支:$ git merge [name] ----将名称为[name]的分支与当前分支合并

创建远程分支(本地分支push到远程):$ git push origin [name]

删除远程分支:$ git push origin :heads/[name] 或 $ git push origin :[name] 

 

*创建空的分支:(执行命令之前记得先提交你当前分支的修改,否则会被强制删干净没得后悔)

$git symbolic-ref HEAD refs/heads/[name]

$rm .git/index

$git clean -fdx

 

3)版本(tag)操作相关命令

查看版本:$ git tag

创建版本:$ git tag [name]

删除版本:$ git tag -d [name]

查看远程版本:$ git tag -r

创建远程版本(本地版本push到远程):$ git push origin [name]

删除远程版本:$ git push origin :refs/tags/[name]

合并远程仓库的tag到本地:$ git pull origin --tags

上传本地tag到远程仓库:$ git push origin --tags

创建带注释的tag:$ git tag -a [name] -m 'yourMessage'

 

4) 子模块(submodule)相关操作命令

添加子模块:$ git submodule add [url] [path]

   如:$git submodule add git://github.com/soberh/ui-libs.git src/main/webapp/ui-libs

初始化子模块:$ git submodule init  ----只在首次检出仓库时运行一次就行

更新子模块:$ git submodule update ----每次更新或切换分支后都需要运行一下

删除子模块:(分4步走哦)

 1) $ git rm --cached [path]

 2) 编辑“.gitmodules”文件,将子模块的相关配置节点删除掉

 3) 编辑“ .git/config”文件,将子模块的相关配置节点删除掉

 4) 手动删除子模块残留的目录

 

5)忽略一些文件、文件夹不提交

在仓库根目录下创建名称为“.gitignore”的文件,写入不需要的文件夹名或文件,每个元素占一行即可,如

target

bin

*.db

 

=====================

Git 常用命令

git branch 查看本地所有分支

git status 查看当前状态 

git commit 提交 

git branch -a 查看所有的分支

git branch -r 查看本地所有分支

git commit -am "init" 提交并且加注释 

git remote add origin [email protected]:ndshow

git push origin master 将文件给推到服务器上 

git remote show origin 显示远程库origin里的资源 

git push origin master:develop

git push origin master:hb-dev 将本地库与服务器上的库进行关联 

git checkout --track origin/dev 切换到远程dev分支

git branch -D master develop 删除本地库develop

git checkout -b dev 建立一个新的本地分支dev

git merge origin/dev 将分支dev与当前分支进行合并

git checkout dev 切换到本地dev分支

git remote show 查看远程库

git add .

git rm 文件名(包括路径) 从git中删除指定文件

git clone git://github.com/schacon/grit.git 从服务器上将代码给拉下来

git config --list 看所有用户

git ls-files 看已经被提交的

git rm [file name] 删除一个文件

git commit -a 提交当前repos的所有的改变

git add [file name] 添加一个文件到git index

git commit -v 当你用-v参数的时候可以看commit的差异

git commit -m "This is the message describing the commit" 添加commit信息

git commit -a -a是代表add,把所有的change加到git index里然后再commit

git commit -a -v 一般提交命令

git log 看你commit的日志

git diff 查看尚未暂存的更新

git rm a.a 移除文件(从暂存区和工作区中删除)

git rm --cached a.a 移除文件(只从暂存区中删除)

git commit -m "remove" 移除文件(从Git中删除)

git rm -f a.a 强行移除修改后文件(从暂存区和工作区中删除)

git diff --cached 或 $ git diff --staged 查看尚未提交的更新

git stash push 将文件给push到一个临时空间中

git stash pop 将文件从临时空间pop下来

git stash list

---------------------------------------------------------

git remote add origin [email protected]:username/Hello-World.git

git push origin master 将本地项目给提交到服务器中

-----------------------------------------------------------

git pull 本地与服务器端同步

-----------------------------------------------------------------

git push (远程仓库名) (分支名) 将本地分支推送到服务器上去。

git push origin serverfix:awesomebranch

------------------------------------------------------------------

git fetch 相当于是从远程获取最新版本到本地,不会自动merge

git commit -a -m "log_message" (-a是提交所有改动,-m是加入log信息) 本地修改同步至服务器端 :

git branch branch_0.1 master 从主分支master创建branch_0.1分支

git branch -m branch_0.1 branch_1.0 将branch_0.1重命名为branch_1.0

git checkout branch_1.0/master 切换到branch_1.0/master分支

du -hs




不要用git pull,用git fetch和git merge代替它



git rebase用于把一个分支的修改合并到当前分支


在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决 冲突;在解决完冲突后,用"git-add"命令去更新这些内容的索引(index), 然后,你无需执行 git-commit,只要执行:

$ git rebase --continue

这样git会继续应用(apply)余下的补丁。

在任何时候,你可以用--abort参数来终止rebase的行动,并且"mywork" 分支会回到rebase开始前的状态。

$ git rebase --abort


你可能感兴趣的:(git)