git工具常见命令与常见问题?

常见操作:

1.内容的增删改查

版本回退
管理修改
撤销修改
删除文件

2.远程仓库

连接远程仓库
克隆远程仓库

3.管理分支

创建管理分支
解决冲突
变基

4.标签管理

标签的创建与管理

注:其实无论是内容还是分支,标签,都涉及增删改查

常见命令:

1.$ mkdir learn
创建一个叫learn的目录(文件夹),且不能是同级目录已经存在的名字
2.1$ cd learn
若现在处在learn的上一级mulu,使用命令,跳转到learn目录内
2.2$ cd /d/learn/
跳转到d盘的learn目录内
3.$ psw
显示目前处在的目录
4.$ git init
本地库初始化,新建库必有此操作,操作后会有.git文件夹,果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见或者调整文件夹选项,隐藏文件可见.
5.1$ git add readme.txt
把文件readme.txt添加到仓库,文件的命名可以是中文,但是git工具中,中文会转化为字符编码

$ git add .   
提交被修改的和新建的文件,但不包括被删除的文件                            

$ git add -u  
--update  update tracked files   
更新所有改变的文件,即提交所有变化的文件,不包括新文件

$ git add -A 
--all add changes from all tracked and untracked files
 上面两个命令的集合,提交已被修改和已被删除文件,包括新的文件

6.$ git commit -m "wrote a readme file"
把文件提交到仓库,-m后面输入的是本次提交的说明,说明部分经过测试是可以使用中文的.
7.1$ git log
显示从最近到最远的提交日志
7.2$ git log --pretty=oneline
显示从最近到最远的提交日志,输出内容会少一些,信息相对整齐一些
8.1$ git reset --hard HEAD^
表示回退到上一个commit版本
hard后面可以跟HEAD版本(上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100)和commit id(commit id版本号没必要写全,前几位就可以了使用commit id的不止可以往回穿越,同样可以从以前穿越回现在).
8.2$ git reset HEAD readme.txt
可以把暂存区的修改撤销掉(unstage),重新放回工作区,即清理暂存区.
9.$ git reflog
用来记录曾经的每一次命令,可以得到commit id.
10.$ git status
查看目前的操作状态
11.$ cat readme.txt
查看readme.txt的内容
12.1$ git diff HEAD -- readme.txt
文件修改,再添加后,但未提交前,查看工作区readme.txt文件和版本库里面最新版本的区别(若有多次添加,只提交版本库中最新版本)
每次修改,如果不用git add到暂存区,那就不会加入到commit中
12.2$ git diff
在添加前,可以查看修改文件修改了哪些地方
13. $ cat readme.txt
查看readme.txt内容
14.$ git checkout -- readme.txt
本质上是用版本库里的版本替换工作区的版本.
清理工作区,配合8.2食用,风味更佳.
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态,让这个文件回到最近一次git commit的状态.
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。让这个文件回到最近一次git add的状态.
注:git checkout – file命令中的–很重要,没有–,就变成了“切换到另一个分支”的命令
另外我觉得变化不大的话,直接修改文件比使用该命令要方便
15.$ git rm test.txt
删除版本库中文件test.txt
16.$ rm test.txt
删除文件管理器中文件test.txt
17.$ git remote add origin [email protected]:/<远程库名>.git
将远程库与本地库连接起来
18.$ git push -u origin master
把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
19.$ git push origin master
本地与远程建立连接之后,把本地master分支的最新修改推送至GitHub.
master是分支名,也可以推送分支,比如dev
20.$ git clone [email protected]:/<远程库名>.git
从远程库克隆一个库到本地
21.$ git checkout -b dev
创建dev分支,并跳转到该分支
实际是两个命令合并

$ git branch dev
创建分支dev(开发的缩写)
$ git checkout dev
跳转到分支dev

22.$ git branch
查看当前分支
23.1$ git merge dev
若当前分支在master分支(没有commit),指定分支为dev,且dev上的文件已经add并commit,把dev分支的工作成果合并到master分支上.
删除远程分支:git push origin –delete 远程分支名称
git merge命令用于合并指定分支到当前分支。
这是Fast-forward,快进模式,并不是所有合并都可以使用该模式,若master与dev均有自己不同的修改,且commit,此时合并,会有冲突,需要手动修改不同的地方.然后再add并commit.这种模式下,删除分支后,会丢掉分支信息
23.2$ git merge --no-ff -m "merge with no-ff" dev
准备合并dev分支,请注意–no-ff参数,表示禁用Fast forward
24.$ git branch -d dev
删除dev分支
25.$ git log --graph --pretty=oneline --abbrev-commit
查看分支合并情况
26.$ git stash
可以把当前工作现场“储藏”起来,用git status查看工作区,就是干净的(除非有没有被Git管理的文件).
27.$ git stash list
查看被藏起来的内容
28.$ git stash pop
恢复的同时把stash内容也删了.
29.git stash apply
git stash drop
用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
30.$ git remote
查看远程库的信息
31.git remote -v

verbose详细的意思
$ git remote -v
origin  git@github.com:michaelliao/learngit.git (fetch)
origin  git@github.com:michaelliao/learngit.git (push)

显示远程库更详细的信息,例如可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。
32.$ git pull
从远程库拖拽内容
33.git branch --set-upstream-to origin/
建立本地分支和远程分支的关联
34.$ git rebase
把本地未push的分叉提交历史整理成直线

git rebase --abort 撤销变基.

35.$ git tag v1.0
默认标签是打在最新提交的commit上的。有时候,如果忘了打标签,比如,现在已经是周五了,但应该在周一打的标签没有打,方法是找到历史提交的commit id,然后打上就可以了.例如:

$ git tag v0.9 f52c633

36.$ git tag
查看所有标签
37.$ git show v0.9
查看标签信息
还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字:

$ git tag -a v0.1 -m "version 0.1 released" 1094adb

注意:标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。
38.$ git tag -d v0.1
删除标签,因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。

$ git push origin v1.0
送某个标签到远程
$ git push origin --tags
一次性推送全部尚未推送到远程的本地标签
如果标签已经推送到远程,要删除远程标签就麻烦一点,
先从本地删除:$ git tag -d v0.9
然后,从远程删除。删除命令也是push,但是格式如下:
$ git push origin :refs/tags/v0.9

常见问题

1.git有时候会报这样的问题(我认为可能是有多个库的原因,导致指向不明)

ERROR: Repository not found.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

解决方案是:git:更改远程仓库指向 remote url
git remote set-url origin [email protected]:xxxxxx/xxxxxx.git
例如:git remote set-url origin [email protected]:IT-Soldier/learngit.git
2.

1.Git Pull Failed
Your local changes would be overwritten by merge.
Commit, stash or revert them to proceed. View them

2.Git Merge Failed
fatal: You have not concluded your merge (MERGE_HEAD exists).


3.Git Pull Failed
Your local changes would be overwritten by merge.
Commit, stash or revert them to proceed. View them

目前我的解决方案是:
1>. 直接commit。在Android studio的VCS— Commit Changes 或者terminal 输入下面的指令:git commit -m “commit info” 。之后再pull或merge就可以顺利进行。
我常使用的是手法1,但我还不是太明白这个原因,随后再来填坑
2>.放弃本地修改,直接覆盖之

3.分支问题
本地仓库初始化 git init 之后,分支master是不会主动创建的,输入git branch却会显示on the branch master,输入git branch不显示选中的分支,而且用git branch dev或者git branch master会报错fatal: Not a valid object name: ‘master’.需要添加文件,提交之后,才会创建master分支,这时也才可以创建dev分支.
4.多人协同开发问题
(这种情况比较常见,比如说你的小伙伴修改了文件,还上传到了远程库,你并不知道,你没有先从远程库pull一下,你也改了一个文件,要向远程库推送,此时是推送不了的,有两种情况)

1.小伙伴修改了文件a,上传到远程库,你修改的是文件b.
那么当push不了的时候,要从远程库pull一下,此时本地库的文件a就被修改了
(我猜是快进模式修改了冲突),
但是文件b没变,再add,commit,本地库领先远程库2个版本,push一下,那远程库的
提交记录会有2个新提交.
2.小伙伴和你都改了文件a,小伙伴上传,你一样push不了,此时的问题叫提交冲突问题,
从远程库pull一下,需要手动修改冲突,改完又是dd,commit,本地库领先远程库2个版
本,push一下,那远程库的提交记录会有2个新提交.

你可能感兴趣的:(git,git命令,github,远程库)