Help us understand the problem. What is going on with this article?

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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした