Edited at

github

More than 1 year has passed since last update.


版本的回溯


仓库的创建&添加和提交仓库

mkdir repository

cd repository
git init #1
git add --all
git commit -m "write a file"#2
git status


  1. 初始化

  2. 然后把这个文件提交到仓库。“”里面的文字是这次提交的注释



查看修改内容&查看提交记录&返回之前状态

git status #1

git diff#2
git add readme.txt
git commit -m "rewrite"
git log#3
git reset --hard HEAD^ #4


  1. 查看当前状态,返回有没有修改或者有没有提交之类的

  2. 查看修改的内容

  3. 查看提交的历史记录 $ git log --pretty=oneline可以把这些弄成一行看着简单一些

  4. HEAD是当前状态,HEAD^是前一个状态,HEAD^^前一个的前一个状态,或者HEAD~100(前100个状态)或者用$ git reset --hard "commit的id" 来返回特定的状态


    • 可以利用下面语句来查看命令历史以便找到commit的id号



   git reflog



工作区和暂存区的理解

工作区就是你这个文件夹里面的范围

暂存区就是你把修改add到的地方

master就是你提交以后文件呆的地方



修改的撤销

若你在工作区修改保存了以后可以删掉再保存,或者利用下面语句来丢弃工作区的修改

$ git checkout -- readme.txt

若你已经add到暂存区域的话,利用下面语句来把暂存区的修改返回到工作区,然后再利用chenkout -- 来取消工作区的修改

$ git reset HEAD readme.txt



删除文件

若利用rm把工作区的文件删除了以后,调用$ git status的时候会提示你少了一个文件

若不再需要的情况下,利用下面的语句来删除掉仓库里面的文件。

$ git rm "test.txt"

若删错了的话,利用来下面来恢复文件区里面的这个文件

$ git checkout -- test.txt



远程仓库


ssh key的设定

github账户不是允许任何电脑都向他push仓库的,所以得让你的账户信任你的电脑,也就是说把电脑唯一的ssh key的证书上传到账户中去

- 设定方法

$ ssh-keygen

用这个指令产生一个sshkey存在自己的根目录下(隐藏),进去.ssh以后打开id_rsa.pub把里面的内容写进账户里


添加远程库

git remote add origin 'url' #1

git remote remote origin #2
git push -u origin master

网址是自己在账户上建立的库(建立时保持和本地文件夹同名),然后在本地的库的目录下利用命令1使本地的库和网上这个远程库相连。然后利用push把自己本地的内容里的全部推给origin,-u是只有第一次推送才用以后push修改的时候直接用$ git push origin master

+ 用命令2取消本地和远程库的关联



从远程库克隆

只会把master克隆下来,若想修改origin上其他的分支的话需要其他的命令

git clone "网址"

git checkout -d dev origin/dev


查看远程库信息&本地修改后的推给远程库

git remote

git remote -v #看更详细的信息
git push origin "master或者dev"


线下多人修改origin时候的问题处理

就是说一个人已经往dev上push过了一处修改,而你又对同一个地方做出了修改,然后你提交的时候就会出错

解决方法是把本地的dev和远程的origin/dev链接起来,然后把origin中的信息pull到本地。然后做之前的冲突解决处理

git branch --set-upstream dev origin/dev

git pull


分支管理


创建与合并分支

git checkout -b dev #1

git branch #2


  1. 建造一个叫dev的分支并且转移到这个分支上,相当于$ git branch dev$ git checkout dev

  2. 查看所有的分支
    然后在dev分支下进行修改然后commit修改
    但是返回master后刚才修改的内容消失
    合并两个分支:
    ~~~python
    git merge dev
    ~~~
    然后在dev上修改的内容就反映到master上面来了
    接下来可以安心的删除dev了

git branch -d dev


解决冲突

就是说建立的新的分支和master都做了修改

强制把他们俩merge在一起就会出错

cat 文件名调用后,冲突文件被改成两边修改都有的文件

然后手动修改再一次提交(在master下

就可以解决问题



留下记录的合并方法

因为普通的$ git merge dev是一种快速合并

就是说dev的球返回给master的感觉

若我们使用--no-ff就可以在历史记录上留下一个合并的记录(相当于两个球合成一个新的球)

git merge --no-ff -m "说明" dev


关于分支写到一半时候的保存

就是说在编写dev分支的时候,接到了一个修改master bug的任务,但是dev还没有完成。为了不给其他人添麻烦先把dev的进度存起来,等master上面的bug修复结束后再回去完成dev

git stash

存储命令,把当前工作区的内容保存起来。然后返回master做别的事情,然后回到dev的时候读取方法如下

git stash list #查看存档的列表

git stash pop #弹出这个存档,同时删除存档
git stash apply#读取存档,但是不删除存档,有多个存档时候可以做选择读取哪个
# $ git stash apply stash@{0}
git stash drop #用来删除存档


删除还没有合并的分支的方法

git checkout -D 文件名


标签管理


创建标签&查看标签状态&删除标签

在master上创建一个tag v1.0 这样的话默认最新的一次commit。或者后面指定id号可以特定的赋予某个状态为这个tag

然后用第3条可以看都存在哪些tag

第四条可以展示那一个tag的最具体信息

git tag v1.0

git tag v0.9 "id号"
git tag
git tag show v1.0
git tag -d v0.9


远程标签管理

提交特定的标签给远程以及一次性提交所有的本地标签

删除远程的标签的方法:从本地删除后,再删除远端的

git push origin v1.0

git push origin --tags
git tag -d v0.9
git push origin :refs/tags/v0.9