git命令

简书Gerrit https://www.jianshu.com/p/b77fd16894b6
git使用简易指南 http://www.bootcss.com/p/git-guide/
图解git: https://my.oschina.net/xdev/blog/114383
廖雪峰git教程: https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

三个区域:工作区、暂存区、版本库


文件三种状态:untracked、unstaged、uncommited
(1)打开你的项目文件夹,除了隐藏的.git文件夹,其他项目文件位于的地方便是工作区,工作区的文件需要添加到Git的暂存区(git add),随后再提交到Git的版本库(git commit)。
(2)首次新建的文件都是untracked状态(未跟踪),此时需要git add到暂存区,Git便会在暂存区中生成一个该文件的索引,文件此时处于uncommited状态,需要git commit生成版本库。添加到了版本库之后,再对文件进行修改,那么文件的状态会变为unstaged状态。

git reset HEAD //将文件从暂存区恢复到工作区,相当于撤销git add操作
git reset --hard //会恢复到本地最新提交的状态(工作区和暂存区内容会被删除,但是不会删除新文件)
git reset --hard 版本库ID //彻底将工作区、暂存区和版本库记录恢复到指定的版本库
git reset --soft 版本库ID //仅仅只是撤销已提交的版本库,不会修改暂存区和工作区
git reset --mixed 版本库ID //仅仅只是撤销已提交的版本库和暂存区,不会修改工作区

git format-patch -n //将本地近n次提交记录打patch(会产生n个patch文件,合入patch按从小到大的顺序合入)
https://www.cnblogs.com/zzb-Dream-90Time/p/7693860.html
git am ./0001_adsp.patch //类似cherry-pick,打patch的同时会增加本地的提交记录

git 提交到Gerrit


1.git pull
2.git add .
3.git commit
4.git config -l/ git branch -a (显示所有的分支情况,包含本地和远程分支的对应情况)
5.git push origin HEAD:refs/for/目的分支

unpack failed 解决方法:
git push --no-thin origin HEAD:refs/for/目的分支 //实际上禁止了“thin pack transfer”优化。

个人Git工作原则一
/** 永远是基于远程库的最新代码工作,尽量每一步操作(特别是add/commit/push)都通过git pull --rebase获取一下当前最新版本。**/

Unable to negotiate with 192.168.10.1 port 29418: no matching key exchange method found. Their of
解决方法:
export GIT_SSH_COMMAND=‘ssh -o KexAlgorithms=+diffie-hellman-group1-sha1’

repo 相关命令


repo init --config-name 设置当前项目下的name,email
repo init -u ssh://username@address:29453/project/manifest -b remote-branch
//会在当前目录下生成一个.repo 文件夹,其中manifest.xml包含了远程库和分支的一些情况,repo sync将根据这个文件中的内容进行sync
//注意:当前文件夹中不能包含 .git,由于git各个分支之间是并行的,违反这种规则.repo 将被拉到家目录下存放
repo sync -c --no-tags -j4 同步代码(-c 指定当前分支)(本地未合并到主分支提交将会被撤销到工作区)
如果不是第一次运行 repo sync ,则相当于 git remote update ; git rebase origin/branch .将server上的code与本地合并;repo sync 会更新 .repo 下面的文件。如果在merge 的过程中出现冲突,这需要手动运行:git rebase --continue

repo sync -c --no-tags master 只更新master分支
repo start test --all 检查分支,将所有库切换到对应的分支
repo branches 查看本地worktree上工作分支状况
repo upload push所有修改到Gerrit
repo status 查看整个worktree的状态
repo abandon <branch_name> 删除指定分支

Gerrit


常用的查询条件
status:open/merged/closed/abandoned/reviewed/submitted
branch: 填你要查的分支名,注意,这个是git库里面的分支名
project: 填你要查的git库的名字,manifest文件里面的name=后面的
GerritID:直接输入Gerrit的ID号,就是链接后面的那个号,比如701991
ChangeID:直接输入ChangeID,就是git log里面那个Change-Id: I9648a8df…
CommitID:直接输入CommitID,就是git的提交号
邮箱:直接输入邮箱
age:s/m/h/d/w/mon/y
owner:’USER’ (owner:self)
reviewer:’USER’
message:”git log里的信息”
label:’VALUE’(Code-Review=-2/Code-Review=+2/Verified-1)
布尔操作:NOT/AND/OR

Git常用操作命令:


git gc
git add -A 提交所有变化
git add [file name] 添加一个文件到git index
git add -u 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
git add . 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
git add -p
输入y来缓存该块
输入n不缓存该块
输入e来人工编辑该块
输入d来退出或进入下一个文件
输入s来分割这个块
git cherry-pick [commit_hash] 从不同的分支里选择某次提交并且把它合并到当前的分支来
git pull --rebase 获取当前最新版本
git branch 查看本地所有分支
git branch -a 查看所有的分支
git branch -r 查看本地所有分支
git blame [filename] 查看文件的每个部分是谁修改的
git status 查看当前状态
git status -s 紧凑的格式输出
git checkout – //丢弃工作区中对文件的修改
git reset commitID 回滚到某一版本
git commit 提交
git commit -a Git就会自动把所有已经跟踪过的文件暂存起来一并提交,跳过 git add
git commit --amend 修改最近一次的提交
git commit -am “init” 提交并且加注释
git config -l 查看配置文件中所有变量的设置(可以看到远程对应分支情况,本地提交模板,name,email的配置情况)
git config commit.template [模板文件名] //这个命令只能设置当前分支的提交模板
git config --global commit.template [模板文件名] //这个命令能设置全局的提交模板,注意global前面是两杠

git push origin master 将文件给推到服务器上
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 checkout dev 切换到本地dev分支
git checkout -b newbranch 创建并切换到newbranch分支
git merge origin/dev 将分支dev与当前分支进行合并
git merge/git rebase //将一个分支的更改应用到另一个分支
git remote show 查看远程库
git remote show origin 显示远程库origin里的资源

Git撤销(恢复某次本地提交的状态):


git reflog //显示整个本地仓储所有的commit
git reflog --relative-date //显示相对时间的commit纪录
git reset --hard hash //撤销到hashid所在记录

git fsck --lost-found //找回git add过但是已经不存在文件中的内容
find .git/objects/* -type f | xargs ls -lt | sed 60q
.git/objects/06/7cb8bf1ee2a59778dbce5bb255d2caacc7c96b
git cat-file -p ID > a.md //生成一个patch文件
ID:067cb8bf1ee2a59778dbce5bb255d2caacc7c96b

Git stash使用


git stash save “stash name” 将当前改动保存为stash name
git stash list 列出stash中保存文件列表
git stash apply stash@{0} 从列表取出
git stash pop stash@{0} 取出并删除
git stash show stash@{0} 查看某一次保存内容
git stash branch 根据最近的stash创建分支,并删除stash
git stash clear 清空列表
git stash drop stash@{0} 删除列表中某一项
git stash apply,pop 不加参数将默认对stash@{0}操作

git rm 文件名(包括路径) 从git中删除指定文件
git clone git://github.com/schacon/grit.git 从服务器上将代码给拉下来
git config --list 看所有用户
git ls-files 看已经被提交的
git commit -a 提交当前repos的所有的改变
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 log --online 压缩每个commit到一行.
git log -n 限制只展示n此commit
git log --stat 输出包括了git log的信息, 并且额外显示了哪些文件被修改了, 哪一行是新加的或者被删除了.
git log -p 有点类似于git log --state, 但是git log -p提供的信息更加详细, 他把修改的内容也给展现出来了.
git log --author="" 搜索指定作者的commit. 可以是正则表达式.
git log --grep="" 搜索commit描述匹配的commit.
git log … 显示到之间的commit. 和这两个参数可以是commit ID, branch名字, HEAD.
git log – 只显示指定文件的commit.
git log --graph --decorate – online --graph会在最左边输出一个基于文本的符号(为了好看, 或者分类).
git log feature 查看指定分支的log(默认情况查看所在分支的提交记录)
git log – 查看指定文件的修改记录
git log --pretty=oneline 文件名
git show <git提交版本号> <文件名>

git diff 查看尚未暂存的更新
git diff --cached 或 $ git diff --staged 查看尚未提交的更新
git rm a.a 移除文件(从暂存区和工作区中删除)
git rm --cached a.a 移除文件(只从暂存区中删除)
git commit -m “remove” 移除文件(从Git中删除)
git rm -f a.a 强行移除修改后文件(从暂存区和工作区中删除)

git remote add origin git@github.com: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分支

HEAD:根节点
refs:目录存储了你在当前版本控制目录下的各种不同引用(引用指的是你本地和远程所用到的各个树分支的信息)
'git show-ref’更清晰地查看引用信息


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] 或 $ gitpush 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]
如: g i t s u b m o d u l e a d d g i t : / / g i t h u b . c o m / s o b e r h / u i − l i b s . g i t s r c / m a i n / w e b a p p / u i − l i b s 初 始 化 子 模 块 : git submodule add git://github.com/soberh/ui-libs.git src/main/webapp/ui-libs 初始化子模块: gitsubmoduleaddgit://github.com/soberh/uilibs.gitsrc/main/webapp/uilibs git submodule init ----只在首次检出仓库时运行一次就行
更新子模块:$ git submodule update ----每次更新或切换分支后都需要运行一下
删除子模块:(分4步走哦)

  1. $ git rm --cached [path]
  2. 编辑“.gitmodules”文件,将子模块的相关配置节点删除掉
  3. 编辑“ .git/config”文件,将子模块的相关配置节点删除掉
  4. 手动删除子模块残留的目录
    5)忽略一些文件、文件夹不提交

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

# no .a files
*.a

# but do track lib.a, even though you're ignoring .a files above
!lib.a

# only ignore the TODO file in the current directory, not subdir/TODO
/TODO

# ignore all files in the build/ directory
build/

# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt

# ignore all .pdf files in the doc/ directory
doc/**/*.pdf

gerrit review 代码,git 修改后重新提交
1.git reset commit_id 返回此次提交前
2.修改完毕后,git add -u .
3.git commit --amend 修改并进行comment加上changeID
4.git push origin HEAD:refs/for/XXXX_branch
gerrit revie 代码,git 提交 review 出现问题,但后来了又提交了新东西,这个时候
commit 1 new
commit 2
commit 3 oldest
1. git rebase oldest^ --interacitve [会弹出VI 让进行编辑 PICK EDIT,选 EDIT 即可]
2. 赶紧修改
3. git add -u .
4. git commit --amend [编辑]
5. git rebase --continue
6. over


常见错误及解决办法:


错误1
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: ‘receive.denyCurrentBranch’ configuration variable to ‘refuse’.
! [remote rejected] master -> master (branch is currently checked out)
error: 无法推送一些引用到 ****

这是因为git默认是拒绝push操作的,我们在.git/config(服务器端)里面添加如下配置项即可:

[receive]
denyCurrentBranch = ignore

或执行 git config receive.denyCurrentBranch ignore 达到相同作用。
这是当我们初始化一个远程仓库的时候,使用git --bare init即可了,而不是使用git init,这样那么该远程仓库的目录下,也包含work tree,当本地仓库向远程仓库push时,如果远程仓库正在push的分支上时,那么push后的结果不会反映在work tree上,也就是在远程仓库的目录下对应的文件还是之前的内容,必须使用git reset --hard才能看到push之后的内容。

  注意如果当时不在push的分支上,是没问题的。

错误2:

error: 无法推送一些引用到 ****
提示:更新被拒绝,因为远程仓库包含您本地尚不存在的提交。这通常是因为另外
一个仓库已向该引用进行了推送。再次推送前,您可能需要先整合远程变更
提示:(如 ‘git pull …’)。
提示:详见 ‘git push --help’ 中的 ‘Note about fast-forwards’ 小节。

解决办法如下:
1、先输入$ git pull origin master //先把远程服务器github上面的文件拉下来

2、如果出现报错:error: Pulling is not possible because you have unmerged files.,表明有冲突文件,需要进行以下操作
1)先输入git add -u
2)git commit -m""
3)再输入$ git pull origin master就不报错了

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值